Visual C++ und Cluster-Api
-
Hallo,
ich habe ein Problem mit Visual C++ und der Cluster API. Ich habe eine Funktion der Cluster Api (ich schreibe es allgemein, da das Problem an mehreren Stellen auftritt), welche grob so aussieht:
clusterfunc(..., LPWSTR lpszString, LPDWORD lpcchSize, ...)Üblicherweise nutze ich solche Funktionen wie folgt:
DWORD dwretval = 0; CString cMyString; DWORD dwSize = 0; ... while ((dwretval = clusterfunc(..., cMyString.GetBuffer(dwSize), &dwSize, ...) == ERROR_MORE_DATA)) { cMyString.ReleaseBuffer(); dwSize++; }Das funtioniert auch wunderbar.
Jetzt habe ich aber das Problem, dass ich eine Funktion (sagen wir mal
func1) zwischen schalten muss. D.h. Ich habe eine Funktion (func1), welche einen Rückgabewert (Fehlercode) besitzt undclusterfuncaufrufen soll. Diese wird dann vonfunc2aufgerufen.Also grob
DWORD func1(...) { /* Behandlung ggf. auch per while*/ clusterfunc(...); } void func2(...) { DWORD dwErrorcode = 0; dwErrorcode = func1(...); }func2benötigt dabei den vonclusterfunczurück gegebenen String. Wie gebe ich den jetzt am Besten zurück? Infunc2ist ja die Größe des benötigten Buffers nicht bekannt, wenn ich einen Buffer anfunc1übergebe und den anpasse, stimmt aber die Adresse ggf. nicht mehr.Ein CString Objekt lässt sich auch nicht so einfach per call-by-reference übergeben, soweit ich weiß.
Kann mir jemand helfen, wie ich dieses Problem effizient löse? Mir würde als Lösung nur einfallen, einen LPWSTR an
func2zu übergeben und denn über Speicherallokation und Freigabe anzupassen. Dann müsste zusätzlich noch ein Pointer auf eine Variable, welche den Wert empfängt, übergeben werden.Gibt es eine bessere Möglichkeit?
Gruß,
Chinook