1
我有一个类型库中定义的结构体被导入到Delphi 5和C#程序集中。通过COM将delphi 5结构/记录的C风格数组传递给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#程序集。理想情况下,我希望这最终在c#端作为一个myStruct [],但我会采取一个指向正确编组内存的指针,因为结构都是blittable。
两种方法我试过是
void DoFoo([MarshalAs(UnmanagedType.LPArray, SizeParamIndex = 1)] MyStruct[] fooArray, int size);
void DoBar(MyStruct[] barArray, int length);
其转换为一个类型库,并导入到德尔福后的
procedure DoFoo(var fooArray: MyStruct; size: Integer); safecall;
procedure DoBar(barArray: PSafeArray; length: Integer); safecall;
我没想到安全数组与结构的工作,和另一个显然不是一个数组。
任何想法/链接/任何非常感谢。
我想我可以把整个事情看作一个字节[],将其安全地存储到c#中,并对其执行一些不安全的指针。 – Spike