gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 03:53:02 28 4
gpt4 key购买 nike

我遇到了一个我无法理解的编译错误。我有两个使用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com