2012-01-22 38 views
0

我面临奇怪的问题。在Unicode模式下的TCHAR被视为typedef字符TCHAR

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

Main.obj : error LNK2019: unresolved external symbol "void * __cdecl VCI_Open_Device(wchar_t *)" ([email protected]@[email protected]) referenced in function _wmain  


VCIHANDLE 
VCI_Open_Device    ( TCHAR *ptszDevicePath 
           ); 

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

我想这是在MFC应用程序模式的调试Unicode模式下的一些设置问题。 请帮助解决此问题。 的#ifdef UNICODE // r_winnt

#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部分去。

+1

在库导出的函数原型中使用'TCHAR'会造成麻烦。你的库应该明确它是否使用Unicode或ANSI。 –

回答

1

确保所有的东西都是用相同的tchar处理构建的。前往项目/ Propeties/C-C++ /语言/对待w_chart内置类型,并检查它是否设置为您的库和应用程序相同的值。缺省设置是否(/ Zc:wchar_t-)

0

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

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

您可以更改IDE或#defining both UNICODE and _UNICODE的设置。

+0

我已经在Unicode模式下编译库了。即使我面临同样的问题 –

0

更改影响这些事情的设置后,你做了“重建所有”?我不确定编译器是否知道自己做这件事,也就是说,它可能不会重新编译需要重新编译的所有东西,并且最终可能会得到一些8位TCHARS模块和其他16位模块。

+0

是的我重建了库和MFC应用程序。但我有同样的问题。我是否需要在预处理器 –