2

私のプロジェクト構造は次のようになります。

 myApp 
 -->WCFSerLib (Any CPU Deafult application) 
 -->ClassLib1 (Any CPU)
 -->ClassLib2 (x86)

アプリケーションを実行しようとすると、残念ながら以下のエラーが発生します。

 System.BadImageFormatException was unhandled by user code

上記を達成できる方法はありますか?

ありがとう

4

3 に答える 3

4

x64マシンでx86 dllを使用しようとしているよりも正しいと思います。AnyCPU を使用すると、.net フレームワークは現在のアーキテクチャを自動的に使用します。

したがって、アプリケーションは、失敗する x86 ライブラリをロードしようとする x64 アプリケーションとして実行されます。したがって、次の 2 つのオプションがあります。

  • ターゲット アーキテクチャを x86 に設定する
  • x64 ライブラリを追加/作成する

環境変数のどこかに両方のバージョン (x86/x64) がある場合、オペレーティング システムは正しいバージョンを自動的に選択します。

于 2012-10-29T11:13:13.937 に答える
1

アプリケーションを x64 システムで実行しているとします。
このようにプラットフォーム タイプを混在させると、WCFService ライブラリまたは ClassLib1 が ClassLib2 のメソッドを呼び出すときに BFE が発生します。最初の 2 つは 64 ビット プロセスとして実行され、後者は x86 モードで強制的に実行されるためです。

すべてのプロジェクトで同じプラットフォーム タイプを設定する必要があります。
もちろん、WCFService ライブラリは AnyCPU のみをサポートするため、すべてのプロジェクトで AnyCPU プラットフォーム タイプを使用するのが理にかなっています。

ClassLib2 で 32 ビット ライブラリ (winscard.dll) を使用する必要があり、そのライブラリの 64 ビット バージョンがない場合は、サービス ライブラリの代わりに WCF サービス アプリケーションを使用する必要があると思います。この質問を参照してください

于 2012-10-29T11:16:56.073 に答える
0

君たちありがとう、

問題はwinscard.dllにあり、 Int32 であるハンドルを使用します。私が変更したのはInt32Int64に置き換えることだけです。

于 2012-10-29T20:48:21.180 に答える