C 下呼叫C寫的dll的例子

2021-04-26 03:04:00 字數 1308 閱讀 1362

初學c#,不明白怎麼用指標呼叫c下的函式,經過一番學習,記錄如下:

//***************====dll_test.def====

library "test_dll"

exports

addtest @ 1

addstring @ 2

///dll 主檔案******************************==

#include

#include

#include

#include

int __stdcall addtest(int x, int y, int *z)

char *addstring(char **stringarray, char *string1, int numofarray)

//*****====c#呼叫dll的方法:*************************==

[system.runtime.interopservices.dllimport("d://2009lab//0902//090208//testcsp_output//debug//test_dll.dll")]

static extern int addtest(int x, int y, intptr z);

[system.runtime.interopservices.dllimport("d://2009lab//0902//090208//testcsp_output//debug//test_dll.dll")]

static extern intptr addstring(intptr stringarray, intptr string1, int numofarray);

private void button1_click(object sender, eventargs e)

private void button2_click(object sender, eventargs e)

//strarray[num_of_vars] = 0;

intptr outstring = marshal.allochglobal(100);

for (int i = 0; i < 100; i++)

addstring(strarray, outstring, num_of_vars);

this.textbox2.text = marshal.ptrtostringansi(outstring);

marshal.freehglobal(outstring);

for (int i = 0; i <= num_of_vars; i++)

}

C 呼叫C 寫的DLL

方法有不少,這裡記錄其中的乙個方法。編譯 呼叫通過了的。期間遇到的問題是c 呼叫時傳遞string型別的引數和返回值會報錯。targetinvocationexception異常,值不在範圍內,記憶體不可訪問等等。解決方法是 在c 的dll中將string型別的引數返回值改為lptstr型別。在c ...

C 呼叫Delphi寫的DLL

在c 中可以這樣呼叫 呼叫 這裡需要注意的是要外傳的pchar型別引數,在c 中對應使用stringbuilder,如果使用string沒有任何資訊傳出,如果使用ref string形式,則會出現記憶體錯誤。在c 中可以這樣呼叫 呼叫 經過測試 delphi中integer的引數使用c 中的int即...

在C 中呼叫C 寫的DLL

這裡兩個問題,一是如何將c 編譯成dll,二是在c 和c 中呼叫這個dll 1,寫c 的dll,參照以下link,它說的是c 中的dll呼叫,所以肯定成功 2,寫乙個c 呼叫上面寫的dll 2.1將以上的dll拷貝到debug release目錄,然後寫c 程式如下 using system usi...