【问题标题】:Sample from Windows SDK works in Debug configuration, and fails in Release. How is that possible?Windows SDK 中的示例在调试配置中工作,在发布中失败。这怎么可能?
【发布时间】:2014-04-15 20:56:52
【问题描述】:

示例:http://msdn.microsoft.com/en-us/library/windows/desktop/dd940359%28v=vs.85%29.aspx

当我在调试配置中构建它时,一切都很好。

当我在发布配置中构建它时,我无法注册它。当我打电话时

regsvr32 ExplorerCommandVerb.dll

上面写着:

The module "ExplorerCommandVerb.dll" was loaded
but the entry-point DllRegisterServer was not found.

Make sure that "ExplorerCommandVerb.dll" is a valid
DLL or OCX file and then try it again.

我的配置:Windows 8.1 64 位上的 Microsoft Visual Studio 2013。在 Windows 7 32 位上也会发生同样的情况。

【问题讨论】:

  • 检查您的项目设置,听起来您缺少未检查构建的预定义符号。
  • 已确认。同样的问题。
  • 肯定是缺少 .def 文件。

标签: c++ visual-c++ com


【解决方案1】:

这是项目的发布版本中缺少的设置。不确定它是否是由转换过程引起的,但我可以按照描述重现问题。

Release 版本中未指定模块定义文件。选择 ExplorerCommandVerb Project,位于解决方案下一级,然后选择属性。选择 Linker,然后在左侧的属性树中输入 Input,然后在右侧选择 Module Definition File。在调试模式下,这显示为 Dll.def,而在发布模式下则丢失。只需将设置复制到发布模式,它就会按预期工作。

【讨论】:

  • 在您自己的项目中,大多数人会在声明中添加 __declspec(dllexport) 以允许从 DLL 中导出符号,而无需模块定义文件。
【解决方案2】:

发现问题:由于某种原因,它没有使用项目中包含的 Dll.def 文件。我强迫它使用带有链接器选项的文件,现在它可以工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多