C#調用C/C++動態鏈接庫

目的:
   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 有關於幾種類型間的對照轉換關係。

發佈了42 篇原創文章 · 獲贊 57 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章