Kompatibilität von nativem wchar_t in VS 2005
-
Servus,
habe ein kleines Problem bei der Verwendung von w_char.
Ich bin dabei, ein älteres Projekt (mit Verwendung der MFC) auf Visual Studio 2005 hochzuziehen.
Dummerweise ist hier nun w_char ein nativer Typ. Dass beisst sich ein wenig mit einigen Bibliotheken, die ich verwende. Ich kann das zwar abstellen und das alte Verhalten erzwingen, aber dann motzt der Linker, dass er die MFC Bibliotheken nicht mehr einbinden kann.
Hat jemand vielleicht eine (möglichst vernünftige) Lösung oder hat ähnliche Probleme?
/dirk
Edit: Überschrift korrigiert
-
ich kenn nur "wchar_t" [in der MSDN suche find ich auch nichts ueber "w_char"]
-
Richtig. Habe mich leider verschreiben.
Es geht um wchar_t und die Option /Zc:wchar_t-
/dirk
-
welche Visual Studio 2005 version hast du ?
-
Hbe mal die Info kopiert:
Microsoft Visual Studio 2005
Version 8.0.50727.42 (RTM.050727-4200)
Microsoft .NET Framework
Version 2.0.50727Installierte Edition: Professional
Microsoft Visual Basic 2005 77891-009-0000007-41189
Microsoft Visual Basic 2005Microsoft Visual C# 2005 77891-009-0000007-41189
Microsoft Visual C# 2005Microsoft Visual C++ 2005 77891-009-0000007-41189
Microsoft Visual C++ 2005Microsoft Visual J# 2005 77891-009-0000007-41189
Microsoft Visual J# 2005Microsoft Visual Web Developer 2005 77891-009-0000007-41189
Microsoft Visual Web Developer 2005Crystal Report AAC60-H0CSA4B-U700045
Crystal Reports für Visual Studio 2005
-
/Zc:wchar_t schaltet halt natives wchar_t ein. Hat schon MSVC7.1 gehabt. Was ist daran jetzt so mystisch?
-
Daran ist nichts mystisch. Die Bedeutung des Schalters ist mir auch klar. Darum ging es mir auch nicht.
Ich will halt meine alten Bibliotheken, die wchar_t* als Paramter bzw. Rückgabewert haben, vernünftig aufrufen können.
/dirk
-
ich fragte nur nach der version da es ja sein konnte das du die express installiert hast #gg
kann du mal genau auffuehren was der linker schreibt ?
-
Hier mal ein Beispiel:
Aus der Header-Datei der Bibliothek:
DLL_API const TCHAR* catFnameToHhsDir( const TCHAR* fname );Mein Code:
CString pathToUser; pathToUser.Format(_T("%s.usr"), catFnameToHhsDir(userName));userName ist ebenfalls CString.
Ausgabe des Linkers:
... : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""__declspec(dllimport) wchar_t const * __cdecl catFnameToHhsDir(wchar_t const *)" (__imp_?catFnameToHhsDir@@YAPB_WPB_W@Z)" in Funktion "__unwind$76548".Als Lösungsmöglichkeit, kann ich natürlich die Header-Datei umdefinieren in
DLL_API const unsigned int* catFnameToHhsDir( const unsigned short* fname );Nur dann bekomme ich natürlich Ärger mit dem CString Geraffel.
Bei Verwendung des /Zc:wchar_t Schalters gibt es dann solche Meldungen:
...: error LNK2001: Nicht aufgelöstes externes Symbol ""public: void __cdecl CWnd::SetWindowTextW(unsigned short const *)" (?SetWindowTextW@CWnd@@QAAXPBG@Z)". ... ... : error LNK2001: Nicht aufgelöstes externes Symbol ""__declspec(dllimport) public: class ATL::CStringT<unsigned short,class StrTraitMFC_DLL<unsigned short,class ATL::ChTraitsOS<unsigned short> > > __cdecl ATL::CStringT<unsigned short,class StrTraitMFC_DLL<unsigned short,class ATL::ChTraitsOS<unsigned short> > >::Left(int)const " (__imp_?Left@?$CStringT@GV?$StrTraitMFC_DLL@GV?$ChTraitsOS@G@ATL@@@@@ATL@@QBA?AV12@H@Z)".