C#marhsal函数返回指向结构数组的指针

问题描述 投票:0回答:1

有一个包含其中的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 ...

c# .net-core marshalling unmarshalling unmanaged
1个回答
0
投票

如果您是非托管方法,则返回指向结构块的指针,则不需要IntPtr[]步骤-仅有仅一个指针

© www.soinside.com 2019 - 2024. All rights reserved.