在 C# 中使用需要指针作为参数的 DLL 函数,我是否正确声明了它?

Using a DLL function in C# that requires a pointer as argument, am I declaring this properly?

我正在用 C# 开发应用程序,必须从 DLL 调用外部函数。此函数需要一个指向整数数组的指针作为参数。 DLL 文档声明整数数组必须有 >= 4kb space 分配。我知道 C# 会避开指针,但我很确定我在这里别无选择,不是吗?在 C# 中,如何分配指向整数数组的指针并保证其大小 >= 4kb?

我有:

public readonly unsafe int*[] dataBuffer = new int*[1000];

但我不确定这是否正确。

方法签名是

int DataRec(void* buf);

这是一个非常简单的案例,您只需要一个指向数组的指针,而不是一个指针数组(如您声明的那样)。

这应该有效:

byte[] buf = new byte[4096]; // allocate managed buffer
fixed (int* p = &buf[0]) // create a fixed pointer to the first element of the buffer (= to the buffer itself)
{ 
   int result = DataRec(p);
   // ...
   // use the data
}