C#(2.0 / 3.5)のレガシーDelphi5DLLを使用しようとしています。エクスポートされた関数の一部は、次のように宣言されています。
function SimpleExport: OleVariant; stdcall;
function BiDirectionalExport(X: OleVariant; var Y: OleVariant): OleVariant; stdcall;
Marshal.GetDelegateForFunctionPointerを使用してこれらをデリゲートとして設定したいのですが、データを正しくマーシャリングするのに問題があります。LoadLibraryとGetProcAddressのkernel32インポートを使用しているので、静的なp / invoke宣言ではなく、GetDelegateForFunctionPointerを使用して実際のマーシャリングを実行しています。
.NETマーシャリングサービスはオブジェクトをCOMOleVariantsにマーシャリングできるため、これを試しました。ただし、これにより例外が発生します:「PInvokeの制限:バリアントを返すことはできません。」だから私はカスタムマーシャラーを使用する必要があると考えています。
Delphi 5 OleVariantを.NETで読み取り可能なものにマーシャリングする正しい方法は何ですか?