C 呼叫C函式的方法

2021-04-20 13:00:08 字數 799 閱讀 3996

c#呼叫c函式的方法:

方法一:

1.新建visual c++型別的win32專案

c語言的函式定義如下:

extern "c" __declspec(dllexport) int fntestwin32(void);

實現如下

extern "c" __declspec(dllexport) int fntestwin32(void)

工程屬性頁[常規]->[配置型別]選擇[動態庫.dll]

會生成.lib和.dll檔案。用dependency工具能看到fntestwin32函式,因為使用了extern "c"

2.c#工程中

[dllimport("testwin32.dll", entrypoint = "fntestwin32", charset = charset.ansi)]

private static extern int fntestwin32();

把win32專案生成的dll拷貝到c#生成的exe檔案,就可以呼叫了。

方法二:

1.新建win32工程

直接使用c語言,函式定義不使用extern "c" __declspec(dllexport)

工程屬性頁[常規]->[配置型別]選擇[靜態庫(.lib)]

2.新建visual c++ clr 類庫工程

這裡面寫的是c++的類,提供給c#直接呼叫的,作為c與c#的中轉,主要使用marshal類

應用上面的win32工程,幷包含標頭檔案

3.c#工程中直接使用clr類庫工程生成的dll

C 呼叫C函式

前言 以前見到extern c 這樣的語句,只是簡單地知道跟外部鏈結有關,但是沒有深刻理解它的意思。首先,為什麼要使用extern c 修飾符?c 呼叫其它語言的函式,由於編譯器生成函式的機制不一樣,所以需要經過特殊處理,才可以呼叫。呼叫c語言的函式,需要在函式宣告的地方語句extern c 如果不...

C 呼叫C函式

我新建了個mfc工程,包含了md5的c檔案,並且按照 cdecl編譯成c 但是我在工程主對話方塊的.cpp檔案呼叫時總出現如下錯誤,用c的時候是沒有的 error c2660 md5init 函式不接受 1 個引數 error c2660 md5update 函式不接受 3 個引數 error c2...

C 呼叫C方法

1,編譯靜態庫 libtest.a gcc c test.c o test.o ar rc libtest.a test.o 2,編譯main函式 g o main main.cpp i.test l.test static ltest test相關檔案放在了當前的test目錄下 root lear...