Hallo Leute!
Zunächst ein bisschen Prosa vorweg: Ich schreibe eine
DLL in Delphi. An das aufrufende Programm muss ich Zeichenketten zurückgeben. Das Aufrufende Programm kann so konfiguriert werden, dass es eine
DLL mit folgender C-Syntax erwartet:
Code:
(STDCALL)
long int myfunction(wchar_t a[], wchar_t b[], wchar_t c[], wchar_t d[], wchar_t e[], wchar_t f[]);
Anmerkung: wchar_t ist ein WideChar in C.
Ich habe die entsprechende Funktion in Delphi so nachgebildet:
function myfunction(a, b, c, d, e, f: Array of WideChar): longint; stdcall;
Jetzt das Problem: Ich kann zwar den String a (und c und e) verändern, aber bei den Strings b (und d und f) bekomm ich eine Zugriffsverletzung.
Ich habe dann den Spieß rumgedreht: Eine
DLL in C geschrieben mit obigem Aufruf und die Anwendung in Delphi, die die
DLL aufruft -> gleiches Ergebnis.
Wenn ich mir die Adressen der Arrays innerhalb der
DLL anzeigen lasse, so bekomm ich für a[0], a[1], a[2], ..., c[0], c[1], c[2] ... plausible Werte (z.B. 1241104 dezimal, immer im korrekten Abstand von 2 Byte) angezeigt; für die anderen (b[0], b[1], ..., d[0], d[1], ...) werden jedoch sehr niedrige Adressen ausgegeben (z.B. 100, 102 dezimal).
Hat jemand von Euch eine Erklärung?
Ciao
P.S. die Problematik im Thread "Strings innerhalb
DLL verändern" habe ich gelöst, deswegen ein neuer Thread