C++ Excel 加载插件错误:XLL 文件被 Excel 识别为文本文件。

3

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

它在我的电脑上以及许多其他电脑上都可以正常运行。但在某些情况下,当我将XLL拖入新的Excel窗口时,会出现以下错误:

您要打开的文件“my_addin.xll”与文件扩展名指定的格式不同。 请核实该文件未损坏且来自可信任的来源,然后再打开文件。是否现在打开该文件?

如果点击 ,则Excel将以文本文件形式打开XLL,显示类似以下内容:

MZÿÿ¸@ Í!¸LÍ!This program cannot be run in DOS mode.

紧接着第一行。这不是预期发生的。可能是什么原因呢?

所有计算机的系统配置如下:

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

缺少外部dll或运行时dll?您是否使用MT标志构建?您可以使用dll依赖性进行检查。此外,您需要一个适用于Excel 32位的x86 xll和一个适用于Excel 64位的x64 xll。 - Malick
1
我发现我在MT下构建了一个项目,但错误地链接了一个应该在MD中使用的库。但为什么有些用户可以使用它,而有些用户不能呢? - athos
1
好的,我认为对于那些它能够工作的用户,他们必须通过另一种软件安装该库。 - Malick
1
这个与之前不同,但密切相关:https://dev59.com/dWnWa4cB1Zd3GeqPzlpb - sɐunıɔןɐqɐp
1个回答

2
总结一下,错误代码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的版本),则没有问题。否则,强烈建议重新构建您的外部DLL(如果可能),并使用/MT标志(运行时库的多线程,静态版本)进行静态链接到您的XLL中。或者更好的是,将其静态链接到您的XLL中(使用静态.lib文件作为第三方组件构建的输出)。

我认为最后一种情况可能是您的情况。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接