我正在编写我的第一个C#应用程序,但幸运的是,我必须使用void指针(使用返回句柄的DLL) . 根据我的阅读,有几个选择:
-
在C#程序中写入我的函数declerations IntPtr而不是void * . 例如:public static extern char SupportsWhatever(IntPtr h);
-
使用ref,例如:public static extern char SupportsWhatever(ref h);
还应该注意,我需要在DLL和C#应用程序之间来回传递信息 .
不安全的选项是第一个出现在谷歌上的选项,但出于某些原因,在我的所有功能都感觉不对之前编写关键词unsafe .
有什么建议?
3 回答
不安全是指向编译器的指令,在此上下文中将有指针 . 来自MSDN
我在.net 1.1中使用它,而在C#中使用C API,用于通过PC的COM端口与大型机通信:)
通常,对于编组情况,使用IntPtr将是此处的首选方法 . 允许使用安全代码,并且非常清楚地表明您的意图是来回编组指针 .
这是BCL表示处理的数量 . 例如,您可以构造表示本机句柄的Cursor from an IntPtr .
基本规则是如果你需要与它交互作为c#中的指针使用不安全的代码/指针 . 如果您可以将其视为不透明句柄,请使用IntPtr . 如果需要将指向结构的指针传递给非托管代码,则可以使用
ref
.