WinCE7.0 Win32智能设备项目使用 CString 的问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了WinCE7.0 Win32智能设备项目使用 CString 的问题相关的知识,希望对你有一定的参考价值。

建 了一个 WinCE 7.0 的 Win32 智能设备项目,在项目中增加了一些 .cpp 和 .h 文件。

先是编译时出现 CString 未定义的错误,于是 #include "atlstr.h"。

再编译此 WinCE7.0 Win32 的工程,Debug 版本链接时出现如下错误:

1>ProtocolParse.obj : error LNK2001: 无法解析的外部符号 "class ATL::CTraceCategory ATL::atlTraceString" ([email protected]@@[email protected]@A)  
1>ProtocolParse.obj : error LNK2001: 无法解析的外部符号 "public: static class ATL::CTrace ATL::CTrace::s_trace" ([email protected]@[email protected]@[email protected])  
1>ProtocolParse.obj : error LNK2019: 无法解析的外部符号 AtlTraceVU,该符号在函数 "public: void __cdecl ATL::CTrace::TraceV(char const *,int,unsigned long,unsigned int,wchar_t const *,char *)const " ([email protected]@[email protected]@[email protected]) 中被引用  
1>ProtocolParse.obj : error LNK2001: 无法解析的外部符号 "class ATL::CTraceCategory ATL::atlTraceException" ([email protected]@@[email protected]@A)  
1>ProtocolParse.obj : error LNK2001: 无法解析的外部符号 "class ATL::CAtlStringMgr ATL::g_strmgr" ([email protected]@@[email protected]@A)  
1>ProtocolParse.obj : error LNK2019: 无法解析的外部符号 "public: struct HINSTANCE__ * __cdecl ATL::CAtlBaseModule::GetHInstanceAt(int)" ([email protected]@[email protected]@[email protected]@[email protected]),该符号在函数 "struct HINSTANCE__ * __cdecl ATL::AtlFindStringResourceInstance(unsigned int,unsigned short)" ([email protected]@@[email protected]@[email protected]) 中被引用  
1>ProtocolParse.obj : error LNK2001: 无法解析的外部符号 "class ATL::CAtlBaseModule ATL::_AtlBaseModule" ([email protected]@@[email protected]@A)  

在网上查找提到的答案是增加对 LIB:atlsd.lib 的链接,如:#pragma comment(lib,"atlsd.lib"),问题解决了。
但将工程修改为 Release 版本时,却出现如下的链接错误:

1>atlsd.lib(Allocate.obj) : error LNK2001: 无法解析的外部符号 _CrtDbgReportW  
1>atlsd.lib(AtlTraceModuleManager.obj) : error LNK2001: 无法解析的外部符号 _CrtDbgReportW  
1>atlsd.lib(atlbase.obj) : error LNK2019: 无法解析的外部符号 _CrtDbgReportW,该符号在函数 "public: __cdecl ATL::CAtlBaseModule::CAtlBaseModule(void)" ([email protected]@@[email protected]) 中被引用  
1>atlsd.lib(atlstr.obj) : error LNK2001: 无法解析的外部符号 _CrtDbgReportW  
1>atlsd.lib(Externs.obj) : error LNK2001: 无法解析的外部符号 _CrtDbgReportW  
1>atlsd.lib(AtlDebugAPI.obj) : error LNK2001: 无法解析的外部符号 _CrtDbgReportW  

不增加对 LIB:atlsd.lib 的链接,出现如上的错误提示;

1>ProtocolParse.obj : error LNK2019: 无法解析的外部符号 "public: struct HINSTANCE__ * __cdecl ATL::CAtlBaseModule::GetHInstanceAt(int)" (?GetHI[email protected]@[email protected]@[email protected]@[email protected]),该符号在函数 "struct HINSTANCE__ * __cdecl ATL::AtlFindStringResourceInstance(unsigned int,unsigned short)" ([email protected]@@[email protected]@[email protected]) 中被引用  
1>ProtocolParse.obj : error LNK2001: 无法解析的外部符号 "class ATL::CAtlBaseModule ATL::_AtlBaseModule" ([email protected]@@[email protected]@A)  
1>ProtocolParse.obj : error LNK2001: 无法解析的外部符号 "class ATL::CAtlStringMgr ATL::g_strmgr" ([email protected]@@[email protected]@A)  

如果增加了对 LIB:atlsd.lib 的链接,Debug 版本编译/链接已经通过,Release版本链接时出错了。所以怀疑与最后增加的那个链接 LIB:atlsd.lib 有关系。正好注意到 LIB 文件名后有一个字母 d,怀疑是 Debug 版本的。
所以在 SDK 的安装目录查找 atlsd.lib 文件,同时也会发现 atls.lib 文件。

最终的修改办法也就明确了,如下:

1 #ifdef _DEBUG  
2 #pragma comment(lib,"atlsd.lib")  
3 #else  
4 #pragma comment(lib,"atls.lib")  
5 #endif  

Debug/Release版本的问题都得到解决。

以上是关于WinCE7.0 Win32智能设备项目使用 CString 的问题的主要内容,如果未能解决你的问题,请参考以下文章

用于空 Win32 项目的智能感知

我必须使用哪个 Win32 功能将文件复制到智能手机文件夹?

新建 WinCE7.0 下的 Silverlight 工程

关于win时间同步的解决方案

(WIN32: 1400 ERROR_INVALID_WINDOW_HANDLE) 使用智能卡签署 CSR 时

Win32_PnPEntity 没有获取隐藏设备