-1
問題是我有一個C++ DLL,我想在我的C#項目中使用。在C中調用C++ DLL
有問題的函數原型:
int MRK3LINK_Open(void (*pfLog)(const char* s),void (*pfErrorOut)(const char* s));
的文檔指出:
- 的pflog是一個記錄類型爲const char的處理函數*指針。
- pfErrorOut是指向const char *類型的錯誤輸出處理函數的指針。
以及如何從C++調用的DLL函數的例子:
static void _LogHandler(const char* sLog) {
printf(sLog);
}
static void _ErrorOutHandler(const char* sError) {
MessageBox(NULL, sError, "2-Link", MB_OK);
}
MRK3LINK_Open(_LogHandler, _ErrorOutHandler);
我現在被困在這2天。你能提供一些提示嗎?
謝謝。
兩個可能的錯誤,你沒有發佈足夠的。您可能忘記了委託聲明中的[UnmanagedFunctionPointer]屬性,以確保CLR知道這是一個CallingConvention.Cdecl函數指針。而且你並沒有將委託對象存儲在任何地方,所以他們會收集垃圾,當C代碼進行回調時會崩潰程序。 – 2014-11-21 12:15:30
感謝您的建議,您是對的。 – 2014-12-16 13:28:59