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

发布于 2024-10-30 17:04:17 字数 182 浏览 1 评论 0原文

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

谢谢。

I have a C#.NET application and an unmanaged C Win32 .DLL program.
How can i pass HANDLEs between the two app?
i mean i wanna set a HANDLE from C code to a output parameter that comes from C#, and again, pass the HANDLE from C# to another function in the DLL?
I guess it is related to IntPtr, but i don't know what the C & C# code should be!

thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

清风无影 2024-11-06 17:04:17

要从 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();    
}

To call C code from C#, you can use the DllImportAttribute to indicate the parameter as 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);

Just make sure that your C functions look like this:

void my_c_function(HANDLE myHandle) 
{   
    // ....
}

void my_c_function_with_out_param(HANDLE * pReturnedHandle)
{
   // ....
   *pReturnedHandle = GenerateHandle();    
}
陌上芳菲 2024-11-06 17:04:17

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

Just cast it ti IntPtr type in C code.

你不是我要的菜∠ 2024-11-06 17:04:17

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

HANDLE is defined as void*, i.e. something the size of a pointer. The equivalent in the managed world is IntPtr.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文