DotNet – 什么是int *?

简单的问题,我导入一个DLL函数,参数是int *。 当我尝试输入Method(0)时,我收到一个错误,上面写着:“int和int *无法转换”。

那是什么意思?

这是pointer to an intpointer to an int经典C表示法。 每当类型后跟一个* ,它表示该类型作为指向该类型的指针 。 在C#中,与C语言不同,除了在项目属性中启用不安全的代码之外,还必须将函数显式定义为使用指针不安全 。 指针类型也不能直接与具体类型互换,因此必须首先引用类型的引用。 要在C#(或C&C ++)中获取指向另一个类型(如int)的指针,必须在要获取指针的变量前面使用解引用运算符& (&符号):

 unsafe { int i = 5; int* p = &i; // Invoke with pointer to i Method(p); } 

‘不安全’代码C#

下面是一些关于不安全代码和C#中指针使用的重要文章。

  • 不安全的背景
  • 指针类型
  • 固定和可移动变量
  • 指针转换
  • 表达式中的指针
  • ‘固定’声明
  • 堆栈分配
  • 动态内存分配

它是指向int的指针 。 通常最好避免托管代码。 您可能希望发布导入的方法声明。 对于这种互操作,IntPtr通常就足够了。

这取决于您使用的语言。 在C#中,您应该使用“ref”关键字声明参数。 在VB.NET中,您应该使用ByRef关键字。 你需要通过传递变量而不是常量来调用它。 像这样的东西:

  int retval = 0; Method(ref retval); // Do something with retval //...