Standard-Bibliothek in Windows-Programmen
-
Hi an alle.
Ist es angebracht, in Windows-Programmen die Standard-Bibliothek von C++ zu benutzen, dass man zum Beispiel Felder als vector uns Strings als string, statt als LPSTR, benutzt, oder ist das nicht üblich?
-
Hallo
Kommt auf deine Laune an. Ich benutze die STL schon, aber wie du es machst, hängt einfach von dir ab.
chrische
-
Wenn man mit "Windows" arbeitet, so sollte man eine dazu passendes Framework verwenden; dann stellst sich die Frage gar nicht.
Die STL ist auf jeden Fall nicht so einfach mit der WinAPI zu verwenden...Verwende doch: MFC / wxWidgets
-
Klar kann man ein Framework benutzen. Und ich selbst programmiere auch hin und wieder mit der MFC. Da ist es logisch, dass man dann CArray und CString nimmt. Doch mir ging es in diesem Thread um reine WinAPI-Anwendungen.
Die STL ist auf jeden Fall nicht so einfach mit der WinAPI zu verwenden...
Was meinst du konkret? Wieso sollte die Verwendung von zum Beispiel vector oder string in WinAPI-Programmen, im Gegensatz zu Konsolenanwendungen, nicht so einfach zu verwenden sein?
Und wie müsste man dynamische Arrays oder zum Beispiel Dateibearbeitung mit der WinAPI realisieren, wenn man auf die Standard-Bibliothek verzichtet? Selbst bauen (bei Arrays) bzw. mit alten C-Funktionen, wie fwrite?
Das sollen keine provokanten Fragen sein, um die Richtigkeit deiner Aussagen anzuzweifeln. Sie zielen wirklich auf Antwort ab.
-
Markus_84 schrieb:
Ist es angebracht, in Windows-Programmen die Standard-Bibliothek von C++ zu benutzen
Die STL ist auf Portabilität ausgelegt, dh du kannst sie praktisch uberall einsetzen. Du solltest dir nur im Vorfeld über einige Sachen im Klaren sein, zB dass WinAPI TCHAR basiert arbeitet, std::string jedoch mit char Elementen (Workaround: typedef std::basic_string<TCHAR> tstring). Dann ist die ganze Angelegenheit auch nicht so dramatisch, wie das nach dem Beitrag von Jochen aussehen mag.
Was Arrays betrifft, da würde ich lieber auf sowas wie boost::array zurückgreifen. Da bei WinAPI Funktionen idR ein Parameter für die maximale Länge dabei ist, ist die Notwendigkeit von dynamischen Arrays, und damit der Allokationsoverhead, nicht wirklich gegeben.
-
Ich verwende in Programmen den MFC CString für meine Strings da ich ihn als wesentlich einfacher zu verwenden finde als basic_string.
Für sonstige Containerklassen mache ich aber einen weiten Bogen um alles was aus der MFC kommt.
Den MFC Container fehlt in der Regel eine Zugriff per const reference, entweder man verzichtet dann häufig auf const correctness oder man nimmt in Kauf, dass beim Zugriff auf der Daten ein copy constructor aufgerufen wird - allein schon aus dem Grund halte ich die MFC Container für eine reine Katastrophe.
-
Markus_84 schrieb:
Die STL ist auf jeden Fall nicht so einfach mit der WinAPI zu verwenden...
Mir ging es (wie groovemaster
schon sagte) hauptsächlich um die string-Klasse...
Auch mit den Arrays-Vectoren, wirst Du nix anfangen können; oder zumindest diese seltenst einer WinAPI-Funktion übergeben können...
-
tstring GetEnvironmentVariable(const tstring& varName) { std::vector<TCHAR> tempPathBuf(MAX_PATH+1); DWORD varLength = ::GetEnvironmentVariable(varName.c_str(), &tempPathBuf[0], MAX_PATH); if ( 0 == varLength ) { return _T(""); } const tstring tempPath( &tempPathBuf[0], varLength ); return tempPath; }Ich mag die STL
