简单的问题,我导入了一个DLL函数,参数是int *。 当我尝试输入Method(0)时,我收到一条错误,上面写着:“int和int *无法转换”。
这是什么意思?
答案 0 :(得分:15)
这是pointer to an int
的经典C表示法。每当类型后跟*
时,它表示该类型为该类型的pointer。在C#中,与C语言不同,除了在项目属性中启用unsafe代码之外,还必须将函数显式定义为unsafe
以使用指针。指针类型也不能直接与具体类型互换,因此必须首先引用类型的引用。要在C#(或C& C ++)中获取指向另一个类型(如int)的指针,必须在要获取的变量前面使用解除引用运算符&
(&符号)指向:
unsafe
{
int i = 5;
int* p = &i;
// Invoke with pointer to i
Method(p);
}
'不安全'代码C#
下面是一些关于不安全代码和C#中指针使用的重要文章。
答案 1 :(得分:6)
这是一个pointer to an int。通常在托管代码中最好避免。您可能希望发布导入的方法声明。对于这种互操作,IntPtr通常就足够了。
答案 2 :(得分:2)
这取决于您使用的语言。在C#中,您应该使用“ref”关键字声明参数。在VB.NET中,您应该使用ByRef关键字。你需要通过传递变量而不是常量来调用它。像这样:
int retval = 0;
Method(ref retval);
// Do something with retval
//...