c# - 带有 native 代码 DLL 的 Excel 2016 VSTO 插件

标签 c# c++ excel dll vsto

使用来自第 3 方的 SDK 创建 Excel 插件。 SDK 包含 native 代码 DLL(32 位和 64 位版本)。我的插件代码在 C# 中,看起来插件只有在“AnyCPU”选项下编译时才会运行。

当我尝试运行该应用程序时,我收到“尝试加载格式不正确的程序。(HRESULT 异常:0x8007000B)”,这通常意味着 64/32 不匹配,错误来自于尝试加载第 3 方 native 代码 DLL。

我的问题是:我对 AnyCPU 的假设是否正确?有没有办法从在 AnyCPU 下编译的插件运行 native 代码 DLL?谢谢!

最佳答案

在 .net 4.5 之前,AnyCPU 取决于您当前的编译机器。 如果您的机器是 32 位 CPU,AnyCPU 会将您的程序编译为 32 位程序。如果它是 64 位 CPU,它将编译为 64 位。

在 .net 4.5 之后,AnyCPU 发生了变化:

  • 如果进程在 32 位 Windows 系统上运行,则它作为 32 位运行 过程。 IL 被编译为 x86 机器码。
  • 如果进程运行于 在 64 位 Windows 系统中,它作为 32 位进程运行。 IL被编译 到 x86 机器码。
  • 如果进程在 ARM Windows 系统上运行, 它作为 32 位进程运行。 IL 被编译为 ARM 机器码。

如果你希望你的程序可以同时运行 32 位和 64 位 cpu,你应该将你的 native 代码 DLL 链接到 32 位版本,否则你需要在单独的 CPU 中编译它们

关于c# - 带有 native 代码 DLL 的 Excel 2016 VSTO 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43219817/

相关文章:

c# - 在 OpenXml 中为 "Tablecell"或 "Table"设置 RTL 方向

c++ - std::queue 位置的包装器

c++ - 存储在 vector 中的对象的所有权

vba - 在所有单元格、所有工作表、整个工作簿中执行代码

Excel 2010 : Open a file that contains more than 1M rows?

vba - Excel - 通过 VBA 显示 ComboBox DropDown

c# - 为什么这个 lambda 表达式对构造函数参数有效

c# - James Montemagno 的 Xam.Plugins.Settings 似乎没有保存我的设置

c# - 解析和序列化

c++ - linux套接字接收离开