可执行程序用Unicode编译,DLL用多字节编译,DLL方法中的参数有字符串类型

风飘水寒 2012-05-27 06:50:36
DLL以多字节字符编译 DLL中 有以下导出函数
extern "C" __declspec(dllexport)
LPVOID CreateObject(LPCTSTR lpszInterfaceName, LPCTSTR lpszInit)
{
CCommon *pObj = NULL;
CString str = lpszInterfaceName;
if(0 == str.CompareNoCase(_T("IPcomXML"))
{
pObj = new CPComXML;
if(NULL == pObj)
{
return NULL;
}
}
else
{
return NULL;
}

return pObj->ExternalQueryInterface();
}


可执行程序用Unicode编译
在可执行程序中 调用此方法时传入的是Unicode字符,那么这里就不会相等了
请问如何解决这个问题??

...全文
517 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
风飘水寒 2012-06-05
  • 打赏
  • 举报
回复
没有人回复了,果断结贴
qq120848369 2012-05-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

UNICODE字面常量是微软搞的,加个_T就会在编译时编程UNICODE编码而不是WINDOWS默认的GBK码。

但要记住,你有权利控制这一切,如果想将一个UNICODE字符串传给DLL,那么将UNICODE字符串iconv为GBK,之后传入即可。
[/Quote]

准确的说是编译时候项目选择UNICODE项目,那么_T包裹的字面常量字符串才是UNICODE编码。
qq120848369 2012-05-27
  • 打赏
  • 举报
回复
UNICODE字面常量是微软搞的,加个_T就会在编译时编程UNICODE编码而不是WINDOWS默认的GBK码。

但要记住,你有权利控制这一切,如果想将一个UNICODE字符串传给DLL,那么将UNICODE字符串iconv为GBK,之后传入即可。
cyj78117520 2012-05-27
  • 打赏
  • 举报
回复
两个编码方式统一一下呗,上次我也遇到这样的问题,真的纠结了半天,也许当前的一个编码问题解决了但是接着又会有另一个出现,并且很缠人,最后我都用了多字符集。

65,179

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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