[英]C# vs C++ DLL call
我正在從C#和C ++調用DLL。 目標是與硬件原型建立連接。 如果我使用C ++調用DLL方法,則建立連接! 但是出於各種原因,我不得不使用C#調用該函數。
如何從同一方法中獲得兩個不同的響應? 唯一的區別是方法是從...中調用的編程語言。
我很感謝每個建議!
這是要調用的方法的定義:
extern "C" __declspec(dllexport) bool establishCon()
{
LL_Init();
return establishConnection();
}
通過以下方式在C ++中調用Method:
HMODULE dll = LoadLibrary(L"LL_Controll.dll");
if (dll != NULL)
{
establishCon est = (establishCon)GetProcAddress(dll, "establishCon");
if (est != NULL)
{
bool res = est();
if (res == true)
{
printf("Worked");
}
else
{
printf("Failed!");
}
}
else
{
printf("Problem!");
}
}
else
{
printf("CantLoadDLL");
}
C ++調用返回true !
在C#中,該方法通過以下方式調用:
[DllImport(@"D:\C\2018-02-21\OccupancyTest01\x64\Debug\LL_Controll.dll", CallingConvention=CallingConvention.Cdecl)]
public static extern bool establishCon();
public bool call_LL_Controll_estabCon()
{
return establishCon();
}
在這種情況下,將返回false 。
我沒有可用於測試的Windows開發平台,但是可以嘗試以下操作嗎?
[DllImport(@"D:\C\2018-02-21\OccupancyTest01\x64\Debug\LL_Controll.dll", CallingConvention=CallingConvention.Cdecl)]
[return: MarshalAs(UnmanagedType.I1)]
public static extern bool establishCon();
布爾類型對於C#互操作而言有些棘手。 YMMV,但是在過去的項目中,為返回的類型添加一個顯式的1字節編組指令對我來說確實有用。
更多信息: https : //blogs.msdn.microsoft.com/jaredpar/2008/10/14/pinvoke-and-bool-or-should-i-say-bool/
與.NET的DLL進行交互時,有3種基本情況:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.