3

WPFアプリケーションからの管理されていないアセンブリでの作業に問題があります。これが私のセットアップで、簡単なスケッチに要約されています。

X64 RUNTIME____________________
|                              |
| AS_EXEC (executing Assy, x86)|
|   |                          |
|   |                          |
|   AS_INT (interfaces, AnyCpu)|
|   |                          |
|   |                          |
|   AS_WRA_1 (wrapper, x86)    |
|   | |                        |
|   | AS_UNM_1 (unmanaged, x86)|
|   |                          |
|   AS_WRA_2 (wrapper, x64)    |
|   | |                        |
|   | AS_UNM_2 (unmanaged, x64)|
|   |                          |
|   AS_WRA_3 (wrapper, x86)    |
|     |                        |
|     AS_UNM_3 (unmanaged, x86)|
|______________________________|

私がやりたいのはテストAS_WRA_1です。

  • AS_WRA_1でのみ機能するアンマネージコードを参照しているため、例外を引き起こす使用を防ぐために、X86このプロジェクトをそれ自体に設定するのが最善だと思います。X86BadImageFormat

  • AS_INTAS_WRAすべての実装のインターフェースが含まれ、に設定されANY CPUます。

  • 私は64ビットランタイムを使用しているので、に設定AS_EXECX86ます。

  • AS_WRA_264ビットのみ、AS_WRA_332ビットで動作します(つまり、基本的に同時に実行することはできませんが、テストAS_WRA_1のみを行いたいので、多かれ少なかれそれを無視します-ようこそ、DLL地獄!)。

実行時に、リフレクションを使用して、ユーザーがUIで選択したラッパーからインスタンスを作成します。不思議なことに、結果は次のようになります。

  • からインスタンスを作成できますAS_WRA_2
  • とのBadImageFormatExceptionsが発生AS_WRA_1AS_WRA_3ます。

これは私が予想していたこととは正反対です...私はここで何を間違っているのですか?

4

1 に答える 1

0

x86(Assy)でコンパイルされた実行可能ファイルがある場合、それは常にx86で実行され、そのすべての依存関係はx86またはAnyCpuである必要があります(x86でも実行されます)。

管理されていないリソースをx86とx64で同時に実行する実行可能ファイルを作成することはできません。そのため、AS_UNM_2はx64、Assyはx86であるため、AssyからAS_UNM_1とAS_UNM_2にアクセスできません。AS_INTはAssyによって呼び出されるため、x86にもなります。

于 2012-08-28T16:51:43.167 に答える