c++ - WTL Error : RegisterClassObjects(DWORD, DWORD) throw()' 已经有一个正文

标签 c++

我遇到了一个我无法理解的编译错误。我有两个使用 WLT 8.0 的 C++ 项目。我正在使用 VS2005 来编译两者。一个在 Win XP 或 7 上运行,另一个在 CE 上运行。它们都包含 WLT 8.0 header 。

但在为 CE 项目编译时出现以下错误:

Error 104 error C2084: function 'HRESULT ATL::CComModule::RegisterClassObjects(DWORD,DWORD) throw()' already has a body C:\WTL80\include\atlapp.h 150 

此错误的来源在这里:

namespace ATL
{
  inline HRESULT CComModule::RegisterClassObjects(DWORD /*dwClsContext*/, DWORD /*dwFlags*/) throw()
  { return E_NOTIMPL; }
  inline HRESULT CComModule::RevokeClassObjects() throw()
  { return E_NOTIMPL; }
}; // namespace ATL

我唯一能看到这两个项目的不同之处是 CE 项目中的这些宏:(_WIN32_WCE=$(CEVER);ARM;_ARM_;$(CePlatform);ARMV4I;UNDER_CE=$(CEVER );),我无法在CE工程中设置__cdecl的默认调用约定。

任何有线索的人都会喜欢这种教育。

提前致谢。

最佳答案

这是由于 WTL 的 atlapp.h 和 ATL 的 atlbase.h 不兼容造成的。它只会发生在 WinCE 项目 #ifdef _WIN32_WCE 上。所以,我认为答案是注释掉损坏的 WTL 部分。

在 atlapp.h 中

// namespace ATL
// {
//   inline HRESULT CComModule::RegisterClassObjects(DWORD /*dwClsContext*/, DWORD /*dwFlags*/) throw()
//   { return E_NOTIMPL; }
//   inline HRESULT CComModule::RevokeClassObjects() throw()
//   { return E_NOTIMPL; }
// }; // namespace ATL

WTL 的这一部分可能是对 ATL 早期版本的补充,只是在 ATL 跟上速度时没有被删除。

-保罗

关于c++ - WTL Error : RegisterClassObjects(DWORD, DWORD) throw()' 已经有一个正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4752698/

相关文章:

c++ - 出错时停止代码执行 (C++)

python - 如何使用 CFFI 将多维 Numpy 数组传递给 C 函数?

带字符串数组的 C++ 快速排序

c++ - 在 FPS 场景中理解 gluLookAt xyz 旋转的问题

c++ - 将 pthread_mutex_t obj 嵌入到 C++ obj 实例中是个好主意吗?我认为(可悲的是)没有 bat

c++ - 调整纹理/RT

C++在不同的函数中重新分配指向动态内存中数组的指针

c++ - 如何使用 mysql 连接器 c++ 设置 autoreconnect 选项

c++ - 我可以使用属性文件和运行时配置来配置 log4cxx 吗?

c++ - 继承和私有(private)成员