我有以下 C++ 结构
struct InnerStruct
{
int A;
int B;
};
struct OuterStruct
{
int numberStructs;
InnerStruct* innerStructs;
};
和一个 C++ 函数
OuterStruct getStructs();
我怎样才能将其编组到 C# 中? C# 定义在哪里
struct OuterStruct {
InnerStruct[] innerStructs;
};
您必须手动执行此操作,因为无法告诉 P/Invoke 层要从 C++ 返回值中封送多少数据。
struct OuterStruct {
int numberStructs;
IntPtr innerStructs;
};
OuterStruct s = getStructs(); // using DllImport
var structSize = Marshal.SizeOf(typeof(InnerStruct));
var innerStructs = new List<InnerStruct>();
var ptr = s.innerStructs;
for (int i = 0; i < s.numberStructs; i++)
{
innerStructs.Add((InnerStruct)Marshal.PtrToStructure(ptr,
typeof(InnerStruct));
ptr = ptr + structSize;
}
请注意,如果您想释放内存innerStructs
在您的 C# 代码中,您必须使用标准分配器CoTaskMemAlloc
在你的 C++ 代码中——然后你可以调用Marshal.CoTaskMemFree
自由innerStructs
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)