一、呼叫步驟
1、準備好c++dll庫;
2、將dll庫放入exe目錄下,或放在某個固定的檔案目錄下;
3、使用.net的interop機制引入c++dll到c#程式中,宣告介面函式,例:
[dllimport("kernel32")]
public
static
extern
intwriteprivateprofilestring(string section, string key, string value, string filepath);
public
static
extern
void
cfb_aesencryptstr_base64(string key, string iv, string ciphertext, stringbuilder outstr);
public
static
extern
void
cfb_aesdecryptstr_base64(string key, string iv, string ciphertext, stringbuilder outstr);
其中宣告的函式名為dll中的介面名,dllimport中的第乙個引數必須為常量。
二、注意事項
1、c++封裝的介面必須以全域性函式形式封裝,否則會出現「無法找到入口點」錯誤,例如:
#define dll_api __declspec(dllexport)
extern
"c" dll_api void cfb_aesencryptstr_base64(const
char *key,char *iv,const
char *plaintext,char *coutstr);
2、注意c#與c++之間資料型別的對應關係,比如
dll 需傳入char *型別
[dllimport(「mydll.dll")]
//傳入值
public static extern int mysum (string astr1,string bstr1);
//dll中申明
extern 「c」 __declspec(dllexport) int winapi mysum(char * astr2,char *bstr2)
dll 需傳出char *型別
[dllimport(「mydll.dll")]
// 傳出值
public static extern int mysum (stringbuilder abuf, stringbuilder bbuf );
//dll中申明
extern 「c」 __declspec(dllexport) int winapi mysum(char * astr,char *bstr)
型別對應關係應用可以參考 C 呼叫DLL庫的方法
1 在c 專案的根目錄下,建立乙個資料夾,叫 thirdparty 在thirdparty裡面新建 include lib 資料夾。include中存放dll庫相關的所有標頭檔案,lib中存放dll庫相關的lib檔案。2 在專案屬性中,vc 目錄 包含目錄 中新增新建的include目錄 3 在專案...
學習使用C 封裝DLL並呼叫
一 生成dll vs2013 建立win32專案 dll 完成 cpp view plain copy include stdafx.h 關鍵在於加入這一句,意為將c語言下的程式匯出為dll extern c declspec dllexport void maopao int p,intcount...
C 呼叫C 的動態庫dll
以往我們經常是需要使用c 來呼叫c 的dll,這通過pinvoke就能實現。現在在實際的專案過程中,有時會遇到在c 的專案中呼叫某個c 的dll來完成特定的某個功能,我們都知道,native c 是沒辦法直接呼叫.net平台的dll的。那有沒有辦法來做到這一點了?答案是肯定的。雖然,native c...