C# 取消结构指针数组的对齐

C# 取消结构指针数组的对齐,c#,pinvoke,C#,Pinvoke,我需要使用C接口连接到第三方应用程序,但我迄今为止尝试的所有方法都是在使用ImageArray.images字段时使应用程序崩溃 其方法之一需要声明为以下结构: typedef struct { int size; Image **images; } ImageArray; int Segment(Image *image, ImageArray **images); Image类型是一个简单的结构,只有int字段(如宽度和高度): 可以首先解除对数组元素的限制,而不是解除对

我需要使用C接口连接到第三方应用程序,但我迄今为止尝试的所有方法都是在使用
ImageArray.images
字段时使应用程序崩溃

其方法之一需要声明为以下结构:

typedef struct {
    int size;
    Image **images;
} ImageArray;
int Segment(Image *image, ImageArray **images);
Image
类型是一个简单的结构,只有
int
字段(如宽度和高度):

可以首先解除对数组元素的限制,而不是解除对
图像
结构的引用,来访问图像。例如:

ImageArray imageArray = ... // initialize it somehow.
imageArray[0]->width
我试图从C#调用的函数声明为:

typedef struct {
    int size;
    Image **images;
} ImageArray;
int Segment(Image *image, ImageArray **images);
到目前为止,我已经声明了以下与本机库接口的结构和方法:

[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal struct Image
{
    public int Width;
    public int Height;
}

[StructLayout(LayoutKind.Sequential, Pack = 1)]
internal unsafe struct ImageArray
{
    public Int32 Size;
    public IntPtr Images;

}

public static extern int Segment([In] ref Image image, [Out] out IntPtr images);
此外,我还实现了以下包装器,它会触发错误:

IntPtr imagesArrayPtr;
Segment(ref nImage, out imagesArrayPtr));

var imageArray = (ImageArray)Marshal.PtrToStructure(imagesArrayPtr, typeof(ImageArray));
var sz = imageArray.Size;
var ptr = imageArray.Images;
var images = new Image[imageArray.Size];
for (var i = 0; i < imageArray.Size; i++)
{
    images[i] = (Image)Marshal.PtrToStructure(ptr, typeof(Image));
    ptr = new IntPtr(ptr.ToInt32() + Marshal.SizeOf(typeof(IntPtr)));
}

函数
ImageLoadFromFile
在其第二个参数的第一个参数处加载指定的图像,如果成功(错误检查ommited),则返回
true

@我不熟悉C++/CLI。你能详细说明一下吗?C++不是一个选项(老板命令…)我添加了一个代码片段,显示对
Segment()
方法的调用。谢谢你的时间!