C# and void pointers

本文关键字:pointers void and | 更新日期: 2023-09-27 18:15:24

我正在编写我的第一个c#应用程序,但幸运的是,我必须使用void指针(与返回句柄的DLL一起工作)。从我读到的有几个选项:

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

  2. 在c#程序中编写我的函数声明IntPtr代替void*。例如:

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

还应该注意的是,我需要在DLL和c#应用程序之间来回封送信息。

不安全选项是第一个出现在Google上的选项,但由于某些原因,在所有函数之前写关键字不安全感觉不太对。

建议吗?

C# and void pointers

通常,对于封送处理情况,使用IntPtr将是首选的方法。这在安全代码中是允许的,并且非常清楚地表明您的意图是来回封送指针。

这是BCL表示句柄的数量。例如,您可以从表示本机句柄的IntPtr构造游标。

基本规则是,如果你需要在c#中作为指针与它交互,请使用不安全代码/指针。如果您可以将其视为不透明句柄,则使用IntPtr。如果您需要将指向结构体的指针传递给非托管代码,则可以使用ref

不安全是给编译器的指令,在这个上下文中会有指针。从MSDN

在公共语言运行时(CLR)中,不安全代码被称为无法核实的代码。c#中的不安全代码不一定是危险的;它只是代码的安全性不能被CLR验证。CLR将因此只执行不安全的代码,如果它是在完全可信的组装。如果您使用不安全的代码,您有责任确保您的代码不会引入安全风险或指针错误。

我从。net 1.1开始使用它,同时使用c#中的c++ API,该API用于通过PC的COM端口与大型机通信:)