我正在编写我的第一个 C# 应用程序,但幸运的是我必须使用 void 指针(使用返回句柄的 DLL)。根据我的阅读,有几个选项:
在我的函数 declerations IntPtr 而不是 void* 中编写的 C# 程序中。例如。: public static extern char SupportsWhatever(IntPtr h);
使用 ref,例如: public static extern char SupportsWhatever(ref h);
还应注意,我需要在 DLL 和 C# 应用程序之间来回编码信息。
不安全选项是第一个在 Google 上弹出的选项,但出于某种原因,在我的所有函数之前写关键字不安全感觉不对。
有什么建议吗?
最佳答案
通常,对于编码情况,使用 IntPtr 将是此处的首选方法。它在安全代码中是允许的,并且非常清楚地表明您的意图是来回编码(marshal)指针。
这是 BCL 中代表句柄的部分。例如,您可以构造一个 Cursor from an IntPtr代表 native 句柄。
关于C# 和 void 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8199874/