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