Einzelnen Beitrag anzeigen

Benutzerbild von weltaran
weltaran

Registriert seit: 12. Sep 2003
Ort: Offenburg
78 Beiträge
 
Delphi 5 Enterprise
 
#1

Parameterübergabe: was geht hier vor?

  Alt 6. Mai 2005, 13:15
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
  Mit Zitat antworten Zitat