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側では、COMを介してC#アセンブリに渡したい構造体のCスタイルの配列へのポインタがあります。理想的には、これをmyStruct []としてc#側で終了させたいのですが、構造体はすべてブリット可能であるため、適切にマーシャリングされたメモリブロックへのポインタを使用します。
私が試した2つの方法は
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;
安全な配列が構造体で機能するとは思いませんでしたが、他の配列は明らかに配列ではありません。
任意のアイデア/リンク/何でも大歓迎です。