C#和void指针

Dig*_* Da 7 c# dll marshalling void-pointers

我正在编写我的第一个C#应用程序,但幸运的是,我必须使用void指针(使用返回句柄的DLL).根据我的阅读,有几个选择:

  1. 不安全的代码,例如参见http://www.c-sharpcorner.com/UploadFile/gregory_popek/WritingUnsafeCode11102005040251AM/WritingUnsafeCode.aspx

  2. 在C#程序中写入我的函数declerations IntPtr而不是void*.例如:public static extern char SupportsWhatever(IntPtr h);

  3. 使用ref,例如:public static extern char SupportsWhatever(ref h);

还应该注意,我需要在DLL和C#应用程序之间来回传递信息.

不安全的选项是第一个出现在谷歌上的选项,但出于某些原因,在我的所有功能都感觉不对之前编写关键词unsafe.

有什么建议?

Ree*_*sey 7

通常,对于编组情况,使用IntPtr将是此处的首选方法.允许使用安全代码,并且非常清楚地表明您的意图是来回编组指针.

这是BCL表示处理的数量.例如,您可以表示本机句柄的IntPtr构造Cursor.