【发布时间】:2015-07-28 10:49:00
【问题描述】:
我有一个 vc++ dll,它使用设置为“使用 Unicode 字符集”的字符集进行编译。 现在我想在我的 vc++ exe 中使用这个 dll,它的字符集是“使用多字节字符集”。我知道理论上没有什么能阻止我这样做,因为在编译 vc++ dll 之后,所有函数签名都是 wchar_t 或 LPCWSTRs .. 在我的 vc++ exe 中,我只是创建该格式的字符串并调用导出的函数。但是,我面临的问题是,unicode dll 中的标头采用 TCHAR 参数,例如:
class MYLIBRARY_EXPORT PrintableInt
{
public:
PrintableInt(int value);
...
void PrintString(TCHAR* somestr);
private:
int m_val;
};
现在我想在我的 exe 中使用这个 PrintString()。所以,我包含了标题并像下面这样使用它:
#include "unicodeDllHeaders.h"
PrintableInt p(2);
wchar_t* someStr = L"Some str";
p.PrintString(someStr);
这正如预期的那样给了我一个编译器错误:
error C2664: 'PrintableInt::PrintString' : cannot convert parameter 1 from 'wchar_t *' to 'TCHAR *'
由于 exe 是使用 MBCS 构建的,因此 TCHAR 被定义为 char 。所以,我认为可以解决这个问题的是:
#define _UNICODE
#include "unicodeDllHeaders.h"
#undef _UNICODE
但在定义 _UNICODE 之后,我仍然得到编译错误。所以,我的下一个猜测是 TCHAR.h 可能已经包含在 #include "unicodeDllHeaders.h" 之前,当我搜索 TCHAR.h 的包含时,它在项目的其他位置。因此,我将包含内容移到了 _UNICODE 的定义之后,这解决了此处的编译错误,但在其他预期将 TCHAR 设为 char 的地方却失败了。所以,我的问题是:
我可以让 TCHAR 在同一个项目中解析为 char 和 wchar_t 吗?我试过#define TCHAR char、#undef TCHAR、#define TCHAR wchar_t,但它在xutils等c头文件中失败了
【问题讨论】:
标签: c++ c visual-c++ dll unicode