使用结构数组作为参数在 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 代码。
我尝试从我的 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 代码。