GetBuffer()?
-
Wofür werden die Methoden GetBuffer() und ReleaseBuffer() verwendet?
Kann mir das jemand erklären? Die Erklärung in der MSDN hab ich nicht richtig kapiert.
-
Um welche Klasse geht es denn?
-
mit GetBuffer bekommt man entweder ein *char oder ein *wchar_t je nach settings, null terminiert
ich selber bevorzuge GetString()beides ist nuetzlich wenn man WinAPI sachen verwenden will/muss
-
Äh, unterschiedlicher Einsatzzweck. Mit GetString bekommst du nen Zeiger auf nen C-String (nullterminiert und so). Den gleichen Effekt bekommst du auch mit nem cast nach "char const*" (bzw. "wchar_t const*"), der übrigens auch implizit möglich ist.
GetBuffer dagegen verwendet man wenn man in einen CString was über einen "char*" bzw. "wchar_t*" *reinschreiben* will. Dazu übergibt man wie gross der Puffer sein soll den man haben möchte. Nachdem man dann geschrieben hat was man schreiben wollte ruft man ReleaseBuffer auf um den Puffer wieder freizugeben, wobei man dann übergeben kann wie lange der String ist den man reingeschrieben hat. Wenn man keine Länge angibt verwendet CString (vereinfacht gesagt) strlen() um die Länge zu ermitteln.
GetBuffer zu verwenden wenn man einen String nur auslesen will ist zumindest schlechter Stil bzw. IMO sogar "falsch". Und GetBuffer ohne folgendes ReleaseBuffer zu verwenden grenzt schon ab Grobheit
-
GetGuffer eignet sich besonders zusammen mit der Verwendung in der WinApi. Man kann damit einfache API Funktionen aufrufen und das Ergebnis in einem CString speichern.
Beispiel:
CString strModuleFilename; ::GetModuleFileName(hInstance,strModuleFilename.GetBuffer(_MAX_PATH),_MAX_PATH); strModuleFilename.ReleaseBuffer();
Noch einfacher geht das aber auch mit CStrBuf was auch das noch kappselt.
CString strModuleFilename; ::GetModuleFileName(hInstance,CStrBuf(strModuleFilename,_MAX_PATH),_MAX_PATH);
-
Ahja, danke für eure zahlreichen Antworten!!