有一个包含其中的C ++库
SimpleStruct
GetSimpleStructs
返回指向此结构的数组的指针喜欢这个:
typedef struct {
int value1;
int value2;
int value3;
} SimpleStruct;
extern SimpleStruct *GetSimpleStructs(int *count);
我在C#.Net Core项目中具有此实现:
[StructLayout(LayoutKind.Sequential)]
struct SimpleStruct
{
int value1;
int value2;
int value3;
}
[DllImport(LibName)]
public static extern IntPtr GetSimpleStructs(out int count);
和将IntPtr
转换为SimpleStruct[]
的函数:
SimpleStruct[] GetSimpleStructs()
{
var ptrToArray = GetSimpleStructs(out var count);
var arrayOfPtrs = new IntPtr[count];
var resultArray = new SimpleStruct[count];
Marshal.Copy(ptrToArray, arrayOfPtrs, 0, count);
for (var i = 0; i < count; i++)
resultArray[i] = Marshal.PtrToStructure<SimpleStruct>(arrayOfPtrs[i]); // HERE
return resultArray;
}
在与// HERE
对齐之前,一切正常。在第一次迭代中,程序仅以退出代码139结尾,没有任何异常。
所以我在做什么错?
而且,我没有能力在具有DllImport
的项目中引用带有struct的项目>
有一个C ++库,其中包含结构SimpleStruct函数GetSimpleStructs,它返回指向此结构的数组的指针,如下所示:typedef struct {int value1; int value2; int ...
如果您是非托管方法,则返回指向结构块的指针,则不需要IntPtr[]
步骤-仅有仅一个指针