0

この質問に基づいて、ここではプリプロセッサディレクティブが適切であることを理解しています: プラットフォームに基づいてインポートするためのC#のプリプロセッサディレクティブ

の簡単なコピーペースト

#if WIN64
    [DllImport("ZLIB64.dll", CallingConvention=CallingConvention.Cdecl)]
#else
    [DllImport("ZLIB32.dll", CallingConvention = CallingConvention.Cdecl)]
#endif

Visual Studioが次のように文句を言っているため、名前空間の最初は機能しませんでした

属性'DLLImport'は、この宣言タイプでは無効です。'メソッド'宣言でのみ有効です

ただし、#else行を変更#elif WIN32してコンパイルします。

Microsoft.Office.Interop.Excelバージョン11とバージョン12のこの特定のケースに、オペレーティングシステムに基づいてさまざまなDLLをロードする手法をどのように適用しますか?

4

1 に答える 1

1

コンパイル時に 1 つの特定のバージョンにリンクする場合 (サンプルが示唆するように) - Interop アセンブリの異なるバージョンを含み、同じソース ファイルのセットを参照する 2 つのプロジェクトが必要です。

実行時にそれを行い、厳密に型指定されたオブジェクトを使用する場合は、興味深いメソッドをラップし、カスタム クラス/インターフェイスを介してそれらを公開する必要があります。これは、相互運用アセンブリが基本クラス (11 ではなく兄弟) を共有しないためです。必要に応じて 12 の親です)。

于 2012-09-28T16:23:09.307 に答える