C++ Unicode模式下的TCHAR被视为typedef char TCHAR

C++ Unicode模式下的TCHAR被视为typedef char TCHAR,c++,visual-studio,C++,Visual Studio,我面临着一个奇怪的问题 我正在编译一个MFC应用程序(VS2008),它使用静态库MyLib.lib。它在调试模式下编译良好。 但在Debug Unicode中显示错误。我正在MFC应用程序中使用MyLib.lib的Debug Unicode版本 Main.obj : error LNK2019: unresolved external symbol "void * __cdecl VCI_Open_Device(wchar_t *)" (?VCI_Open_Device@@YAPAXPA_W

我面临着一个奇怪的问题

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

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 WCHAR TCHAR,但在这里它也显示typedef char TCHAR。 我签入WebCam.lib项目TCHAR是调试Unicode模式下的typedef WCHAR TCHAR,这是正确的

我想这是MFC应用程序模式中调试Unicode模式中的某些设置的问题。 请帮助解决此问题。 #ifdef UNICODE//r\u 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部分。

请确保您链接的每个模块都使用相同的字符编码设置(例如,每个模块都使用UNICODE构建,即TCHAR扩展到wchar\t)

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


您可以从IDE或中更改设置。

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

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


您可以从IDE或。

更改影响这些内容的设置后,是否执行了“全部重建”?我不确定编译器是否知道自己会这样做,也就是说,它可能不会重新编译所有需要重新编译的内容,您可能会得到一些带有8位TCHARS的模块,而其他模块则带有16位TCHARS。

更改影响这些内容的设置后,您是否进行了“全部重建”?我不确定编译器是否知道自己会这样做,也就是说,它可能不会重新编译所有需要重新编译的内容,并且您可能会得到一些带有8位tchar的模块,而其他模块则带有16位tchar。

请确保您的所有内容都是使用相同的tchar处理构建的。转到项目/properties/C-C++/Language/treatw w_chart as build-in Type,检查您的库以及应用程序是否将其设置为相同的值。默认设置为No(/Zc:wchar\u t-

确保所有内容都使用相同的tchar处理。转到项目/properties/C-C++/Language/treatw w_chart as build-in Type,检查您的库以及应用程序是否将其设置为相同的值。默认设置为No(/Zc:wchar\u t-

在库导出的函数原型中使用
TCHAR
会带来麻烦。您的库应该明确使用Unicode还是ANSI。在库导出的函数原型中使用
TCHAR
,会带来麻烦。你的库应该是明确的,无论它使用Unicode还是ANSI。我已经在Unicode模式下构建了库。仍然我面临着同样的问题我已经在Unicode模式下构建了库。仍然我面临着同样的问题我重建了库和MFC应用程序。仍然我有同样的问题。我需要在设置中的预处理器中放置一些东西吗MFC应用程序。我仍然有同样的问题。我需要在设置中的预处理器中放置一些东西吗