Hallo,
Ich habe eine in c++ geschriebene DLL. Ich will eine Funktion aufzurufen. Alles funktioniert, wenn ich sie , z.b. in OnButtonClick() aufrufe, aber wenn die Funktion zuerst in der anderen Delphi Funktion aufgerufen wird, die weiter in OnButtonClick(), dann komme ich zur 'Zugriffsverletzung...'. Ich habe bemerkt, dass es passiert nur mit den Funktionen, die Eingangsparameter besitzen. Hier ist der Quelltext:
C++
extern "C" int __declspec(dllexport) _params(char *fn);
Delphi:
<pre>
...
function _start(): Integer; stdcall; external 'DLlProject1.dll';
function _params(fn: Pchar): Integer; stdcall; external 'DLlProject1.dll';
...
//hier funktioniert
procedure TForm1.btn1Click(Sender: TObject);
var res: Integer;
str: String;
begin
str := 'Dynamic call.';
res := _params(Pchar(str));
ShowMEssage(intToStr(res));
end;
//ab hier nicht mehr
function TForm1.subFunction(): Integer;
var str: String;
begin
str := 'Dynamic (subFunction)';
subFunction := _params(PChar(str));
end;
procedure TForm1.btn2Click(Sender: TObject);
var res: Integer;
begin
res := subFunction;
ShowMEssage(intToStr(res));
end;
....
</pre>
in der Funktion btn2Click wird ShowMessage nicht angezeigt, obwohl die DLL FUnktion intern richtig gelaufen ist. Etwas mit der Quitierung stimmt nicht.
Danke.
Ich habe eine in c++ geschriebene DLL. Ich will eine Funktion aufzurufen. Alles funktioniert, wenn ich sie , z.b. in OnButtonClick() aufrufe, aber wenn die Funktion zuerst in der anderen Delphi Funktion aufgerufen wird, die weiter in OnButtonClick(), dann komme ich zur 'Zugriffsverletzung...'. Ich habe bemerkt, dass es passiert nur mit den Funktionen, die Eingangsparameter besitzen. Hier ist der Quelltext:
C++
extern "C" int __declspec(dllexport) _params(char *fn);
Delphi:
<pre>
...
function _start(): Integer; stdcall; external 'DLlProject1.dll';
function _params(fn: Pchar): Integer; stdcall; external 'DLlProject1.dll';
...
//hier funktioniert
procedure TForm1.btn1Click(Sender: TObject);
var res: Integer;
str: String;
begin
str := 'Dynamic call.';
res := _params(Pchar(str));
ShowMEssage(intToStr(res));
end;
//ab hier nicht mehr
function TForm1.subFunction(): Integer;
var str: String;
begin
str := 'Dynamic (subFunction)';
subFunction := _params(PChar(str));
end;
procedure TForm1.btn2Click(Sender: TObject);
var res: Integer;
begin
res := subFunction;
ShowMEssage(intToStr(res));
end;
....
</pre>
in der Funktion btn2Click wird ShowMessage nicht angezeigt, obwohl die DLL FUnktion intern richtig gelaufen ist. Etwas mit der Quitierung stimmt nicht.
Danke.
Comment