【问题标题】:C++ Excel Add-in loading error: XLL file is loaded by Excel as text fileC++ Excel 加载项加载错误:Excel 将 XLL 文件加载为文本文件
【发布时间】:2025-12-16 13:55:01
【问题描述】:

我正在使用 C++ 和 XLW library 为 Excel 构建 XLL 插件。

它在我的电脑和许多其他电脑上都能正常工作。但在某些情况下,当我将 XLL 拖入新的 Excel 窗口时,会出现此错误:

您尝试打开的文件“my_addin.xll”位于不同的 格式比文件扩展名指定的格式。验证文件是 在打开文件之前未损坏并且来自受信任的来源。做 你想现在打开文件吗?

如果单击yes,则 Excel 会将 XLL 作为文本文件打开,显示如下:

MZÿÿ¸@Í!¸LÍ!此程序无法在 DOS 模式下运行。

就在第一行。预计不会发生这种情况。这可能是什么原因?

这是所有机器的系统配置:

  • Microsoft Windows 7 Professional 64 位(操作系统)
  • Microsoft Excel 2010 32 位

【问题讨论】:

  • 缺少外部 dll 或运行时 dll 吗?你是用 MT 标志建造的吗?你能检查一下dll依赖吗?您还需要一个用于 excel 32 位的 x86 xll 和一个用于 excel 64 位的 x64 xll。
  • 发现我是在 MT 下构建的,但错误地链接到了打算在 MD 中使用的库。但是为什么有些用户可以使用有些不能呢?
  • 好的,我认为对于使用它的用户来说,他们必须有另一个软件安装的lib。
  • 这个不一样,但关系密切:*.com/questions/12790943/excel-xll-for-64bit-excel

标签: c++ excel xll xlw


【解决方案1】:

总而言之,错误码This program cannot be run in DOS mode.通常与以下问题之一有关:

  1. XLL 是使用/MD 标志构建的,但最终用户没有所需的 CRT DLL。

  2. XLL 编译时使用了错误的平台;例如用于构建 XLL 的平台 x64,然后将其加载到 32 位 Excel 中(反之亦然)。

  3. 缺少外部 DLL 依赖项。

  4. 有一个外部 DLL 依赖项已使用 /MD 标志(运行时库的多线程特定和 DLL 特定版本)构建。在这种情况下,如果最终用户拥有正确版本的 CRT(用于构建外部 DLL 的版本),则没有问题。否则,强烈建议使用/MT 标志(多线程,运行时库的静态版本)重建您的外部DLL(如果可能)。甚至更好的是,将其静态链接到您的 XLL(使用静态 .lib 文件作为第三方组件构建的输出)。

我相信最后一个可能是你的情况。

【讨论】: