MFC, ATL, STL und Strings ...
-
Folgender Hintergrund :
Ich hab Anwendungen die die MFC nutzen und Anwendungen die nur die ATL in verbindung mit der STL nutzen ... Viele anwendungen nutzen Programmteile, die das gleiche tun (File Handling und Parse geschichten).
Klar, das man den Code mal vereinheitlichen will ... und zusammen packen, im moment will ichs einfach mal in eine Lib tun.Nu hab ich aber folgendes Problem ... Alle Strings die aus der Interaktion mit dem Benutzer kommen, sind TCHAR's ( LPCTSTR ) (Hurra Window). Die filestreams der STL erwarten aber als Paramater aber chars (char * ). Wenn man nicht mit _UNICODE compiliert, kein Problem, das kann ich aber ned sicherstellen. (Soll spaeter mal ne CE version von einigen ANwendungen geben). Also muss man normgerecht convertieren.
Mit der ATL kann man das mit T2A oder A2T tun ...
Ich glaub in der MFC hat man das Problem ned, weil man eh nicht oft mit der STL, sondern mit CFile oder so arbeitet.
In meiner Lib will ich aber nur das einbinden, was von allen seiten wirklichgebraucht wird ... also weder ATL, noch MFC ... sondern nur die STL.
Will aber die Convertierung in meiner Lib vornehmen, weil alle seiten (MFC und ATL) die TCHars verwenden.
Per hand koennte ich die Umwandlung selber tun ... mit abfragen des COmpilerflags und WideCharToMultiByte(), oder MultiByteToWideChar(). Ist nur etwas aufwendig.Gibts da aber nix fertiges ? Tritt dieses Problem so selten auf ?
Oder wie waere das korrekte vorgehen ?Ciao ...
-
Servus,
vorneweg, die ganzen Makros sind alle um die MultiByte... Funktionen herum gebaut.
- A2CW
- A2W
- W2CA
- W2A
Schau mal in dem Header AFXPRIV.H nach, da stehts.
Es gibt auch die Ole Makros
T2COLE, T2OLE, OLE2CT, OLE2T
OLECHARs sind halt auch nur WCHARs (ausser Du definierst die Direktive OLE2ANSI für den Compiler)
Du musst:
USES_CONVERSION;
vor der Verwendung deklarieren.
-
Danke fuer die Antwort , aber ich kenn die Makros ... Brauch die ja in den ATL Projekten oft genug
Und ja, sie nutzen die Multibytefunktionen ... sind aber viel praktischer anzuwenden als per Hand zu convertieren 
Das ist aber ned mein problem ... um die makros zu nutzen, muesst ich ATL Anteile einbinden .... zumindest die ATLBASE.H
Keine Ahnung ob ich dann mal probs bekomme, wenn ich die lib in nem anderen Projekt einbinde. Deshalb wollt ich es vermeiden.Momentan hab ich ne andere Loesung.
Hab ne eigene rudimentaere String klasse, die auf Tchars basiert. wenn aber _UNICODE definiert ist ... fuehrt diese immer nen 2. member als reinen string (char * ) mit und kann somit leicht Tchars in chars umwandeln. Der char * wird bei jeder bearbeitung des Tchars mit nachgezogen.
Bei _Unicode hab ich dann halt mehr Speicherverbrauch und mehr rechenzeitverlust, weil ich die strings immer doppelst bearbeiten muss .... Aber wer _UNICODE verwendet ... soll auch leiden
Meine Frage war eher dahingehend, ob es nicht schon fertige loesungen fuer das problem gibt ... z.b. Filestreams, die mit TCHARS umgehen koennen (unwahrscheinlich, TCHAR ist M$ spezifisch) oder es leicht zu handhabende umwandlungsroutinen gibt ...
Naja, im moment funktionierts zumindest.Ciao ...