2011-04-06 59 views
0

我有一個C#.NET應用程序和一個非託管的C Win32 .DLL程序。 如何在兩個應用程序之間傳遞HANDLEs? 我的意思是我想設置一個HANDLE從C代碼到來自C#的輸出參數,並再次將HANDLE從C#傳遞給DLL中的另一個函數? 我想它與IntPtr有關,但我不知道C#代碼應該是什麼!如何在C#.NET和C Win32 DLL之間傳遞HANDLEs?

謝謝。

+0

你在說什麼?手柄或手柄?什麼是HANDLER? – 2011-04-06 09:58:28

+0

對不起。我糾正了錯誤。我的意思是HANDLE在C. – losingsleeep 2011-04-06 10:06:57

回答

3

從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();  
} 
+0

中是'void *'非常好的幫助。感謝您的幫助和您花費的時間。 – losingsleeep 2011-04-06 10:24:45

0

只需在C代碼中將其轉換爲IntPtr類型即可。

0

HANDLE是定義爲void*,即指針的大小。託管世界中的等價物是IntPtr