2012-01-22 4 views
0

У меня возникла странная проблема.TCHAR в режиме Unicode обрабатывается как typedef char TCHAR

Я компилирую приложение MFC (VS 2008), которое использует статическую библиотеку MyLib.lib.it компилирует в режиме отладки. , но в Debug Unicode отображается ошибка. Я использую Debug Unicode для версии MyLib.lib в приложении MFC.

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 является ЬурейиМ обугливается TCHAR, который является правильным, но в режиме отладки Unicode TCHAR должен быть ЬурейиМ WChar TCHAR, но здесь также он, показывая ЬурейиЙ обугленный TCHAR. Я проверил в проекте WebCam.lib. TCHAR - это typedef WCHAR TCHAR в режиме отладки Unicode, который исправляет.

Я думаю, что это проблема с некоторыми настройками в режиме отладки Unicode в режиме приложения MFC. Пожалуйста, помогите решить эту проблему. #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. Перейдите к Project/Propeties/C-C++/Язык/Обработайте w_chart как встроенный тип и проверьте, установлено ли оно для того же значения для вашей библиотеки, а также для приложения. Значение по умолчанию: Нет (/ Zc: wchar_t-)

0

Убедитесь, что каждый подключаемый модуль использует одинаковые настройки кодировки символов (например, каждый модуль построен с использованием Unicode, то есть с расширением TCHAR до wchar_t).

Строительство в режиме Юникод по умолчанию, начиная с VS2005.

Вы можете изменить настройки как из IDE, так и из #defining both UNICODE and _UNICODE.

+0

У меня есть lib в режиме Unicode. Пока я столкнулся с той же проблемой –

0

После изменения настроек, которые влияют на эти вещи, вы сделали «Перестроить все»? Я не уверен, что компилятор знает, что нужно сделать это сам, то есть он не может перекомпилировать все, что нужно перекомпилировать, и вы можете получить некоторые модули с 8-битными TCHARS и другими с 16-битными.

+0

Yup Я перестраиваю приложение Lib и MFC. У меня такая же проблема. Мне нужно что-то поместить в препроцессор в настройке –

Смежные вопросы