DotNet – 什么是int *?
简单的问题,我导入一个DLL函数,参数是int *。 当我尝试输入Method(0)时,我收到一个错误,上面写着:“int和int *无法转换”。
那是什么意思?
这是pointer to an int
的pointer 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 //...