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