首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unicode模式下的TCHAR被视为typedef char TCHAR

Unicode模式下的TCHAR被视为typedef char TCHAR
EN

Stack Overflow用户
提问于 2012-01-23 00:33:49
回答 3查看 2.5K关注 0票数 1

我正面临着奇怪的问题。

我正在编译一个MFC应用程序(Vs2008),它使用静态库,MyLib.lib.it在调试模式下编译得很好。但在调试Unicode中,它显示错误。我在MFC应用程序中使用调试Unicode版本的MyLib.lib。

代码语言:javascript
复制
Main.obj : error LNK2019: unresolved external symbol "void * __cdecl  VCI_Open_Device(wchar_t *)" (?VCI_Open_Device@@YAPAXPA_W@Z) referenced in function _wmain    


VCIHANDLE 
VCI_Open_Device             (   TCHAR *ptszDevicePath   
                                );

在这里,我注意到在MFC应用程序中,在调试模式下,TCHAR是typedef char TCHAR,这是正确的,但在调试Unicode模式下,TCHAR应该是typedef TCHAR,但在这里,它也显示了typedef char TCHAR。我在调试Unicode模式下检查WebCam.lib项目TCHAR是类型定义WCHAR TCHAR,这是正确的。

我猜是MFC应用程序模式中的Debug Unicode模式的某些设置有问题。请帮助解决此问题。#ifdef UNICODE // r_winnt

代码语言:javascript
复制
#ifndef _TCHAR_DEFINED
typedef WCHAR TCHAR, *PTCHAR;
typedef WCHAR TBYTE , *PTBYTE ;
#define _TCHAR_DEFINED
#endif /* !_TCHAR_DEFINED */

typedef LPWCH LPTCH, PTCH;
typedef LPCWCH LPCTCH, PCTCH;
typedef LPWSTR PTSTR, LPTSTR;
typedef LPCWSTR PCTSTR, LPCTSTR;
typedef LPUWSTR PUTSTR, LPUTSTR;
typedef LPCUWSTR PCUTSTR, LPCUTSTR;    
typedef LPWSTR LP;
typedef PZZWSTR PZZTSTR;
typedef PCZZWSTR PCZZTSTR;
typedef PUZZWSTR PUZZTSTR;
 typedef PCUZZWSTR PCUZZTSTR;
typedef PNZWCH PNZTCH;
typedef PCNZWCH PCNZTCH;
typedef PUNZWCH PUNZTCH;
typedef PCUNZWCH PCUNZTCH;
#define __TEXT(quote) L##quote      // r_winnt

#else   /* UNICODE */               // r_winnt

#ifndef _TCHAR_DEFINED
typedef char TCHAR, *PTCHAR;
typedef unsigned char TBYTE , *PTBYTE ;
#define _TCHAR_DEFINED
#endif /* !_TCHAR_DEFINED */

typedef LPCH LPTCH, PTCH;
typedef LPCCH LPCTCH, PCTCH;
typedef LPSTR PTSTR, LPTSTR, PUTSTR, LPUTSTR;
typedef LPCSTR PCTSTR, LPCTSTR, PCUTSTR, LPCUTSTR;
typedef PZZSTR PZZTSTR, PUZZTSTR;
typedef PCZZSTR PCZZTSTR, PCUZZTSTR;
typedef PNZCH PNZTCH, PUNZTCH;
typedef PCNZCH PCNZTCH, PCUNZTCH;
#define __TEXT(quote) quote         // r_winnt

#endif /* UNICODE */             

在这里,当我右键单击TCHAR时,它不会出现在UNICODE部分中。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-23 01:53:10

确保你所有的东西都是用相同的tchar处理构建的。转到Project/Propeties/C-C++/Language/Treat w_chart as Built in Type,检查它是否也为应用程序的库/in设置了相同的值。缺省设置为No (/Zc:wchar_t-)

票数 1
EN

Stack Overflow用户

发布于 2012-01-23 01:01:02

确保您链接的每个模块都使用相同的字符编码设置(例如,每个模块都是使用Unicode构建的,即使用the扩展到wchar_t)。

自VS2005以来,以Unicode模式构建是默认的。

您可以从集成开发环境或#defining both UNICODE and _UNICODE中更改设置。

票数 0
EN

Stack Overflow用户

发布于 2012-01-23 01:24:06

在更改了影响这些内容的设置后,您是否执行了“全部重建”?我不确定编译器是否知道自己做这件事,也就是说,它可能不会重新编译所有需要重新编译的东西,您可能最终会得到一些具有8位TCHARS的模块和另一些具有16位TCHARS的模块。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8962633

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档