2012-01-22 39 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應用程序。但我有同樣的問題。我是否需要在預處理器 –