0

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で読み取り可能なものにマーシャリングする正しい方法は何ですか?

4

1 に答える 1

1

OleVariantはほぼすべての型であり、C#のすべての型はオブジェクトとして処理できるため、system.objectを試してみます。

また、このリンクが役立つ場合があります。

于 2009-11-20T14:01:27.213 に答える