我有一個C#.NET應用程序和一個非託管的C Win32 .DLL程序。 如何在兩個應用程序之間傳遞HANDLEs? 我的意思是我想設置一個HANDLE從C代碼到來自C#的輸出參數,並再次將HANDLE從C#傳遞給DLL中的另一個函數? 我想它與IntPtr有關,但我不知道C#代碼應該是什麼!如何在C#.NET和C Win32 DLL之間傳遞HANDLEs?
謝謝。
我有一個C#.NET應用程序和一個非託管的C Win32 .DLL程序。 如何在兩個應用程序之間傳遞HANDLEs? 我的意思是我想設置一個HANDLE從C代碼到來自C#的輸出參數,並再次將HANDLE從C#傳遞給DLL中的另一個函數? 我想它與IntPtr有關,但我不知道C#代碼應該是什麼!如何在C#.NET和C Win32 DLL之間傳遞HANDLEs?
謝謝。
從C#調用C代碼,你可以使用DllImportAttribute指示參數作爲IntPtr的:
[DllImport("mydll.dll", EntryPoint="my_c_function")]
public static extern void my_c_function(IntPtr myHandle);
[DllImport("mydll.dll", EntryPoint="my_c_function_with_out_param")]
public static extern void my_c_function(out IntPtr returnedHandle);
只要確保你的C函數是這樣的:
void my_c_function(HANDLE myHandle)
{
// ....
}
void my_c_function_with_out_param(HANDLE * pReturnedHandle)
{
// ....
*pReturnedHandle = GenerateHandle();
}
中是'void *'非常好的幫助。感謝您的幫助和您花費的時間。 – losingsleeep 2011-04-06 10:24:45
只需在C代碼中將其轉換爲IntPtr類型即可。
HANDLE
是定義爲void*
,即指針的大小。託管世界中的等價物是IntPtr
。
你在說什麼?手柄或手柄?什麼是HANDLER? – 2011-04-06 09:58:28
對不起。我糾正了錯誤。我的意思是HANDLE在C. – losingsleeep 2011-04-06 10:06:57