gpt4 book ai didi

c# - 了解平台目标

转载 作者:行者123 更新时间:2023-11-30 18:37:51 24 4
gpt4 key购买 nike

我在使用 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 实现的接口(interface),并设置为 ANY CPU

  • 我在 64 位运行时,所以我也将 AS_EXEC 设置为 X86

  • AS_WRA_2 仅适用于 64 位,AS_WRA_3 32 位(这意味着基本上我不能同时运行它们,但因为我想测试 AS_WRA_1,我或多或少很高兴地忽略了它 - 欢迎回来,DLL hell !)。

在运行时,我使用反射从用户在 UI 中选择的包装器创建一个实例。奇怪的是,结果如下:

  • 我可以从 AS_WRA_2 创建实例
  • 我得到了 AS_WRA_1AS_WRA_3 的 BadImageFormatExceptions。

这与我的预期完全相反......我在这里做错了什么?

最佳答案

如果你有一个用 x86 (Assy) 编译的可执行文件,它将始终在 x86 中运行,并且它的所有依赖项都必须在 x86 或 AnyCpu 中(它们也会在 x86 中执行)。

您不能拥有同时在 x86 和 x64 中执行非托管资源的可执行文件,因此您将无法从 Assy 访问 AS_UNM_1 和 AS_UNM_2,因为 AS_UNM_2 是 x64 而 Assy 是 x86。由于 AS_INT 被 Assy 调用,它也变成了 x86。

关于c# - 了解平台目标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12139350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com