000
02.11.2004, 10:13 Uhr
~Steffen
Gast
|
Hallo auch. Ich habe bisher hier im Forum keine brauchbare Lösung zu meinem Problem gefunden. Das Thema wurde zwar oft angesprochen, aber irgendie kam selten was raus.
Also: Eine Dll Funktion soll an das Hauptprogramm einen String char[...] oder auch string zurückgeben, dass Problem ist nur: Der Speicher soll dynamisch allokiert werden, d.h. die Größe der Ausgabe der DLL ist unbekannt und soll auch nicht durch eine Bufferlänge seitens des Hauptprogrammes beschränkt sein.
Normalerweise kommt man da schnell auf die Idee mit Zeigern, aber alles was ich versuche funktioniert einfach nicht:
Die Dll Funktion:
C++: |
char* WINAPI TESTCOMMAND3(string *p1,string *p2, string *p3, LPDWORD datalen) { string internalbuff; int i; char* res;
for (i=0;i<22330;i++) { internalbuff.append("TEST\n"); } *datalen = internalbuff.length(); res = new char[internalbuff.length()+1]; strcpy(res,internalbuff.c_str()); return res; }
|
und der Aufruf im Hauptprogramm:
C++: |
string str1,str2,str3; char* strres; DWORD len; if (mod) { dllfnc = (DLLFUNCTION)GetProcAddress(mod,"TESTCOMMAND3"); if (dllfnc) { strres = dllfnc(NULL,NULL,NULL,&len); } ...
//strres ausgeben...
delete [len+1] strres; strres=NULL; FreeLibrary(mod);
|
So. Nach dem Schema hats bisher im Release Mode compilt funktioniert. Nun hab ichs mal im Debug erstellt, da gabs einen Assertion Fehler: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse)
der mir nix sagt. Kann mir jemand weiterhelfen? Das kann doch alles gar nich so schwer sein?
Gruß Steffen |