【问题标题】:Migrating C++ ATL Executable application from VS2003 to VS2013将 C++ ATL 可执行应用程序从 VS2003 迁移到 VS2013
【发布时间】:2015-08-10 13:40:00
【问题描述】:

我正在将我的 C++ ATL 可执行应用程序从 VS2003 迁移到 VS2013。

在 VS 2003 中

CExeModule 类:公共 CComModule

在VS2013中(改为)

CExeModule 类:公共 ATL::CAtlExeModuleT

我已成功迁移项目,在编译过程中我遇到了问题

**

错误 C2664: 'ATL::CHandle::CHandle(HANDLE) throw()' : 无法转换 参数 1 从 'bool' 到 'ATL::CHandle &'

**

如果我评论以下代码,我不会收到此错误

_AtlModule.WinMain(nShowCmd);

有人可以帮忙解决这个错误吗?

附加信息

C:\Program Files\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlbase.h(3628):错误 C2664:'ATL::CHandle::CHandle(HANDLE) throw()':无法转换参数 1 从 'bool' 到 'ATL::CHandle &' C:\Program Files\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlbase.h(3608):编译类时 模板成员函数'HRESULT ATL::CAtlExeModuleT::PreMessageLoop(int) throw()' C:\Program Files\Microsoft Visual Studio 12.0\VC\atlmfc\include\atlbase.h(3695) :参见对函数模板实例化的参考 'HRESULT ATL::CAtlExeModuleT::PreMessageLoop(int) throw()' 存在 编译

stdafx.h(107) : 参见类模板实例化的参考 'ATL::CAtlExeModuleT' 正在编译

【问题讨论】:

  • 我想问题出在你没有显示的CExeModule::PreMessageLoop 上。
  • 我的代码中没有任何 PreMessageLoop...这就是我感到惊讶的地方...
  • 其他东西会干扰(一些头文件包含在 stdafx.h 或其他地方等)。您可以在 VS2013 中创建一个干净的 ATL EXE 项目以确保它可以构建,并且众所周知它是可构建的。 WinMain 的行包括此类中的一系列调用,这些调用最终会发生冲突。我不认为这条线本身不好(看起来不错)。
  • 是的,我通过在 VS2013 中创建一个新的 ATL 项目来尝试相同的方法,发现它构建良好(没有添加任何新代码)。并且该行没有错“_AtlModule.WinMain(nShowCmd);”
  • 它窒息的那一行是CHandle h(pT->StartMonitor()); CExeModule 有一个方法StartMonitor 返回bool,有没有机会?另一种可能性 - 你可能有一个宏或 typedef 在你的程序某处重新定义HANDLE?还要检查项目属性中的预处理器定义。

标签: visual-c++ visual-studio-2013 com atl


【解决方案1】:

感谢伊戈尔 Tandetnik....

我在更改 CExeModule 类中的函数名后解决了这个问题 bool StratMonitor()

【讨论】:

    猜你喜欢
    • 2011-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多