我在导入 Delphi 5 和 C# 程序集的类型库中定义了一个结构。
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct MyStruct
{
public uint a;
public float b;
}
MyStruct = packed record
a: LongWord;
b: Single;
end;
在 Delphi 方面,我有一个指向所述结构的 C 样式数组的指针,我想通过 COM 将其传递给 C# 程序集。理想情况下,我希望它以 myStruct[] 的形式出现在 c# 端,但我将使用一个指向正确编组的内存块的指针,因为这些结构都是 blittable。
我尝试过的两种方法是
void DoFoo([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] MyStruct[] fooArray, int size);
void DoBar(MyStruct[] barArray, int length);
在转换为类型库并导入 delphi 之后是
procedure DoFoo(var fooArray: MyStruct; size: Integer); safecall;
procedure DoBar(barArray: PSafeArray; length: Integer); safecall;
我认为安全数组不适用于结构,而另一个显然不是数组。
任何想法/链接/任何非常感谢。