Unicode和非Unicode下的CString问题。

处处留心 2013-10-31 09:53:40
我要调用一个dll库,别人编写的这个库,用的是CString类型的参数,而不是char*。
如:void FUN(CString str)
并且这个库是在ANSI下编译的。

现在我有一个Unicode下编译的工程,想调用这个函数,怎么处理?

我可以把unicode字符串转为char*,但在参数传递的那一刻,他又会强制转换成CString。然后unicode下CString是宽字符的,ANSI下编译的库调用就会出错。

求大侠帮忙。

我现在有个比较笨的方法:
1.再编辑一个库,再ANSI下编译,传char*参数,多做一步。
2.将CString中,把字符串强制转换,去掉低位的字符。

请大家帮忙想个好处理点的方法,谢谢
...全文
269 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
欢乐马_19e9 2013-11-07
  • 打赏
  • 举报
回复
char szANSI[] = "Hello" --> CStringA wchar_t szUnicode[] = L"Hello" --> CStringW
encoderlee 版主 2013-10-31
  • 打赏
  • 举报
回复
另外你导入DLL函数的时候就要显示的指名它的参数是CStringA。 __declspec(dllimport) void FUN(CStringA str); 如果它提供了头文件的话,就改一下它的头文件,把CString改成CStringA。 因为CString在你的UNICODE工程下实际上指的是CStringW
encoderlee 版主 2013-10-31
  • 打赏
  • 举报
回复
FUN(CStringA(L"UNICODE"));
encoderlee 版主 2013-10-31
  • 打赏
  • 举报
回复
CStringA和CStringW可以互转换。 只需在调用DLL函数传递参数的时候,构造一个无名CStringA对象传递进去就行了。 CStringW str = L"UNICODE"; FUN(CStringA(str));
xiaohuh421 2013-10-31
  • 打赏
  • 举报
回复
因为CString有两个版本, 如果它是在ASCII下编译的dll, 那么你需要把头文件中所有关于字符串的类型都要变成 ASCII类型 比如有CString 要全部变成CStringA TCHAR ---> char LPCTSTR --> LPCSTR ....
luoyz520 2013-10-31
  • 打赏
  • 举报
回复
WideCharToMultiByte先把宽字符转换后再传进去
yaozhiyong110 2013-10-31
  • 打赏
  • 举报
回复
就按楼上就行了啊 你直接传CStringA啊
_船长_ 2013-10-31
  • 打赏
  • 举报
回复
传递一个CStringA类型的变量吧!编写的DLL怎么不提供两个版本呢,表示很蛋疼!
见习学术士 2013-10-31
  • 打赏
  • 举报
回复
没有办法,只能按照你的笨方法实现了
worldy 2013-10-31
  • 打赏
  • 举报
回复
使用CStringA,值初始化的时候不要_T

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧