我想傳遞一個委託給一個C++方法的代碼:傳遞一個委託作爲方法指針
#pragma unmanaged
void login(char *uname, void (*cb)())
{
if (strcmp(uname, "test")==0)
{
printf("Correct!\n");
cb();
}
else
{
printf("False\n");
}
}
#pragma managed
public ref class log
{
public: delegate void successdelg();
public: static void logme(String ^s, successdelg ^success)
{
login((char*)(void*)Marshal::StringToHGlobalAnsi(s), success);
}
};
但我發現了這個錯誤:「錯誤C2664:‘登錄’:不能轉換參數2從'log :: successdelg ^'到'void(__cdecl *)(void)'「
正常情況下,我可以跳過這個錯誤,只是將方法沒有任何委託給我的C++函數,但我用這個一個引用我的C#項目的庫,它將方法從我的C#應用程序傳遞給C++ dll。
與您的實際問題無關,但您使用'StringToHGlobalAnsi'錯誤。正如文檔中提到的,當你完成後你必須調用'FreeHGlobal'。 – hvd