Morje zusammen...
Hab da ein Problem:
Ich hab mir eine DLL mit einer funktion zusammengebastelt, an welche ein ARRAY of String übergeben wird. Die in dem ARRAY (größe = dynamisch) enthaltenen Strings werden umformatiert und in einem neuen ARRAY (result) zurückgegeben.
DLL
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26:
| [...]
type ROrdner = record Name: String; Verknuepfung: Integer; end; result_ARRAY = ARRAY of ARRAY of ROrdner;
[...]
function ADInputTOfilestructure(ARRAY_incoming: ARRAY of String): result_ARRAY stdcall; var [...] begin
[ ... CODE ... ] end;
exports ADInputTOfilestructure;
begin end. |
EXE
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| [...]
type ROrdner = record Name: String; Verknuepfung: Integer; end; result_ARRAY = ARRAY of ARRAY of ROrdner;
[...]
implementation
function ADInputTOfilestructure(ARRAY_incoming: ARRAY of String): result_ARRAY; stdcall; external 'dll\Project2.dll';
[...]
procedure TForm1.Button1Click(Sender: TObject); var Ordner: result_ARRAY; begin
Ordner:= ADInputTOfilestructure(ARRAY_); showMessage(Ordner[1,1].Name); end; |
Wenn ich nun im Programm den Button betätige, bekomme ich zuerst den Inhalt von Ordner[1,1].Name ausgegeben und folgend die Meldung "INVALID POINTER OPERATION".
An dem Sourcecode in der DLL liegts keinesfalls. Ich hab es mal mit ner ganz einfachen Funktion probiert -> ARRAY of String übergeben, Inhalt von ARRAY[0] modifizieren und ARRAY zurückgeben .... Dabei kommt der gleiche Fehler.
Wenn ich aber in der DLL und im eigentlich Programm aus
Delphi-Quelltext
1: 2:
| type result_ARRAY = ARRAY of String; |
... folgendes mache ...
Delphi-Quelltext
1: 2:
| type result_ARRAY = ARRAY [0..5] of String; |
dann funktionierts wunderbar
kann mir jemanden helfen?