如何在C#.NET和C Win32 DLL之间传递HANDLE?

时间:2011-04-06 09:52:30

标签: c# c winapi handle

我有一个C#.NET应用程序和一个非托管的C Win32 .DLL程序。 我如何在两个应用程序之间传递HANDLE? 我的意思是我想将C代码中的HANDLE设置为来自C#的输出参数,并再次将C#中的HANDLE传递给DLL中的另一个函数? 我想这与IntPtr有关,但我不知道什么是C& C#代码应该是!

感谢。

3 个答案:

答案 0 :(得分: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();    
}

答案 1 :(得分:0)

只需将其转换为C代码中的IntPtr类型。

答案 2 :(得分:0)

HANDLE定义为void*,即指针大小的东西。托管世界中的等价物是IntPtr