使用结构数组作为参数在 C# 中加载 C-Dll

Load a C-Dll in C# with struct array as parameter

我尝试从我的 C-Dll 导入函数。一个函数有一个结构数组作为参数。该结构将填充在函数中。

struct test
{
    int test1;
    int test2;
};

void FillStruct( struct test stTest[], int size)
{
    if(size == 2){
        stTest[0].test1 = 5;
        stTest[0].test2 = 5;

        stTest[1].test1 = 2;
        stTest[1].test2 = 2;
    }
}

方法FillStruct应该在C#中使用。

我想我必须在 C# 中创建结构。如果我在 Fillstruct 中使用 memcpy,我必须编组结构吗?

struct Test
{
    public int test1;
    public int test2;
}

[DllImport("mydll", CallingConvention = Cdecl)]
public static extern void FillStruct( Test[] stTest, int size);

[...]
var test = new Test[n];
FillStruct(test, test.Length);

我没有看到这里的问题。你用你的c代码中的内存做什么并不重要:只要你不导致缓冲区溢出,你就可以读,写你想要的副本。 c# 数组只是数组的类型和长度,后面是数据。当您将 p/invoke 与简单结构一起使用时,指向原始数组中第一个元素的指针将传递给您的 C 代码。