C#調用C/C++動態鏈接庫的簡單案例:用C#實現窗口調用由C/C++編譯生成的dll,dll實現兩整數求和功能,即函數int Add(int x, int y);
實現步驟:
一:用C/C++編寫dll
1、新建VC++應用程序項目,輸入名稱爲MyAdd,在應用程序設置時選擇dll應用程序類型,並勾選爲空項目類型。
2、新建項目頭文件dll.h 如下:
#ifndef DLL_EXPORT
#define DECLDIR __declspec(dllimport)
#else
#define DECLDIR __declspec(dllexport)
#endif
3、建立項目源文件dllmin.cpp
#include <iostream>
#define DLL_EXPORT //先定義宏
#include "dll.h"//這個頭文件必須在#define DLL_EXPORT後面
extern "C"
{
DECLDIR int Add( int a, int b )
{
return( a + b );
}
}
4、編譯調試,生成MyAdd.dll庫函數
二:用C#語言建立窗口應用程序並調用dll
1、用VS2010建立C#應用窗口程序,添加按鈕和文本輸出控件,如下圖
2、將MyAdd.dll拷貝到新建項目文件下的bin目錄中。
3、響應按鈕事件,調用MyAdd.dll實現兩數相加並在文本框中顯示相加後的結果,其實現代碼如下:
首先聲明調用MyAdd.dll
[DllImport("MyAdd.dll", SetLastError = true)]
private static extern int Add(int a, int b);
在按鈕相應中添加響應代碼:
int x = 7;
int y = 9;
int z = Add(x, y);
textBox1.Text = Convert.ToString(z);
4、調試程序生成可執行文件,實現結果如圖三:總結
1、注意事項
(a)、將生成的dll文件放入DllImport可以尋找到的地方:
1、.exe文件所在目錄
2、System32目錄
3、環境變量目錄。
(b)、在C#窗口調用函數下,首先聲明調用Dll文件,如下:
[DllImport("MyAdd.dll", SetLastError = true)]
private static extern int Add(int a, int b);
聲明中應注意:當參數傳遞時,尤其是傳遞和返回字符串時,VC++中主要字符串類型爲:LPSTR,LPCSTR, LPCTSTR, string, CString, LPCWSTR, LPWSTR等,但轉爲C#類型卻不完全相同。詳見http://blog.csdn.net/sunboyljp/article/details/5110639#comments 有關於幾種類型間的對照轉換關係。