我在使用 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
只能在其中工作的非托管代码,我认为最好将此项目设置为X86
自身 - 只是为了防止使用会导致BadImageFormat
异常。AS_INT
包含所有AS_WRA
实现的接口并设置为ANY CPU
.我在 64 位运行时,所以我也设置
AS_EXEC
为X86
.AS_WRA_2
仅适用于 64 位,AS_WRA_3
32 位(这意味着基本上我不能同时运行它们,但由于我只想测试AS_WRA_1
,我或多或少很高兴地忽略了这一点 -欢迎回来,DLL 地狱!)。
在运行时,我使用反射从用户在 UI 中选择的包装器创建一个实例。奇怪的是,结果如下:
- 我可以从创建实例
AS_WRA_2
- 我得到 BadImageFormatExceptions
AS_WRA_1
和AS_WRA_3
。
这与我的预期完全相反......我在这里做错了什么?