我昨天问了一个类似的问题,但这略有不同。我在将结构数组从 c# 传递到 c++ 时遇到问题,然后又将其取回。
这是c++代码。首先,结构:
struct Tri
{
public:
int v1, v2, v3;
}
现在是 c++ dll 部分:
extern "C" __declspec(dllexport) void Dll_TriArray(Tri *tri)
{
int num = 10;
tri = new Tri[num];
for (int i = 0; i < num; i++)
{
tri[i].v1 = i + 5;
tri[i].v2 = i + 10;
tri[i].v3 = i + 25;
}
}
这是 c# 代码,再次从结构开始:
[StructLayout(LayoutKind.Sequential)]
public struct Tri
{
public int v1, v2, v3;
}
public class Testing
{
[DllImport("testing.dll")]
static extern void Dll_TriArray(out Tri[] tryArray);
public GetTriArray()
{
Tri[] triArray;
Dll_TriArray(out triArray);
}
}
因此,我在调用 GetTriArray 方法时得到的 triArray 将返回为 null。我曾考虑过将 IntPtr 作为参数传入,但是如何将 intptr 编组到结构数组中/从结构数组中编组?
顺便说一句 - 在这个阶段,我对内存泄漏不感兴趣。