【问题标题】:Multibyte CString to Unicode MFC多字节 CString 到 Unicode MFC
【发布时间】:2013-05-23 21:31:01
【问题描述】:

我有 2 个 MFC 项目。

一个库项目使用多字节字符集。

可执行项目使用 Unicode 字符集。

我只编写了库项目,并且必须在可执行文件中使用它。 该库的一个函数返回一个 CString。 当我尝试将该 CString 放入我的 unicode 项目中的变量并编译时 我明白了:

Error 3 error LNK2001: unresolved external symbol "public: class  
ATL::CStringT<wchar_t,class StrTraitMFC_DLL<wchar_t,class 
ATL::ChTraitsCRT<wchar_t> > > __thiscall CTextDisplay::GetString(void)" 
(?GetString@CTextDisplay@@QAE?AV?$CStringT@_WV?  $StrTraitMFC_DLL@_WV?
$ChTraitsCRT@_W@ATL@@@@@ATL@@XZ)

我不介意转换任何项目。我只是想要一种让库能够将字符串返回到可执行项目的方法。 将任一项目切换到另一个字符集不是一种选择,因为它们都是巨大的。

提前致谢。

【问题讨论】:

  • 我很高兴知道我可以将返回值填充到什么类型的变量中,而不需要链接器给我一个未解析的外部变量

标签: mfc cstring multibyte unicode-string


【解决方案1】:

实际上没有返回 CString 这样的事情。有 CStringA 和 CStringW,听起来您正在接收一个并想要另一个。您需要使用 MultiByteToWideChar 和/或 WideCharToMultiByte 进行转换。

http://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx

【讨论】:

  • 好的,从基础开始。您说它是 CStringW 或 CStringA 并且只需执行其中任何一个 CStringW val = m_batch.Get_String(); CStringA val2 = m_batch.Get_String();我每次都收到链接器错误。我什至不知道传递的类型是什么
  • @irco 如果库是使用与 exe 不同的设置编译的,那么两者的 CString 定义可能不同(并且这不兼容)。通过返回 (const char*) 或 (const wchar_t*) 而不是 CString 来避免该问题。
  • 谢谢。对不起,如果我在这里很慢,从来不用处理这些东西。我让函数返回一个字符数组,但现在里面的所有内容都是乱码。我这里需要 MultiBytetoWideChar 吗?
猜你喜欢
  • 1970-01-01
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 2018-10-18
  • 2019-10-04
相关资源
最近更新 更多