Mahyaa
دوشنبه 21 فروردین 1385, 16:19 عصر
با سلام .
من یک DLL نوشته ام که شامل چند Function و Procedure عمومی است .
هنگام صدا کردن اینها در برنامه , بدون مشکلی اجرا میشوند ولی هنگام بستن برنامه یک Error میگیرم "Invalid Pointer Operation" !
هنگامی که بعضی از Function ها را استفاده می کنم این پیغام در هنگام بسته شدن برنامه ظاهر میشود . مشکل از کجاست ؟
//My DLL :
function DLLFunc(var S1 : String) : String; stdcall;
begin
.
.
.
Result : MyLocalFun;
end;
function MyLocalFun;
var
RetStr : String;
begin
try
AnObject := TAnObject.Create(Application);
.
.
.
finally
AnObject.Free;
end;
Result := RetStr;
end;
//My Exports :exports DLLFunc ;
//In the Application
type
TMyDLLFuncCall = function(var S1 : String) : String; stdcall;
var
Hndl : THandle;
procedure TForm1.Form1Create(Sender : TObject);
begin
Hndl := LoadLibrary('MyLib.DLL');
if Hndl = 0 then
Application.Terminate;
end;
procedure TForm1.Form1Destroy(Sender : TObject);
begin
if Hndl <> 0 then
FreeLibrary(Hndl);
end;
function CallDLLFunction (var S2 : String):String;
var
DllFuncCall : TMyDLLFuncCall;
begin
if Hndl <> 0 then
begin
DllFuncCall := GetProcAddress(Hndl , 'DLLFunc');
if @DllFuncCall <> nil then
begin
Result := DllFuncCall(S2);
//Use S2 for some means .
end;
end;
end;
من یک DLL نوشته ام که شامل چند Function و Procedure عمومی است .
هنگام صدا کردن اینها در برنامه , بدون مشکلی اجرا میشوند ولی هنگام بستن برنامه یک Error میگیرم "Invalid Pointer Operation" !
هنگامی که بعضی از Function ها را استفاده می کنم این پیغام در هنگام بسته شدن برنامه ظاهر میشود . مشکل از کجاست ؟
//My DLL :
function DLLFunc(var S1 : String) : String; stdcall;
begin
.
.
.
Result : MyLocalFun;
end;
function MyLocalFun;
var
RetStr : String;
begin
try
AnObject := TAnObject.Create(Application);
.
.
.
finally
AnObject.Free;
end;
Result := RetStr;
end;
//My Exports :exports DLLFunc ;
//In the Application
type
TMyDLLFuncCall = function(var S1 : String) : String; stdcall;
var
Hndl : THandle;
procedure TForm1.Form1Create(Sender : TObject);
begin
Hndl := LoadLibrary('MyLib.DLL');
if Hndl = 0 then
Application.Terminate;
end;
procedure TForm1.Form1Destroy(Sender : TObject);
begin
if Hndl <> 0 then
FreeLibrary(Hndl);
end;
function CallDLLFunction (var S2 : String):String;
var
DllFuncCall : TMyDLLFuncCall;
begin
if Hndl <> 0 then
begin
DllFuncCall := GetProcAddress(Hndl , 'DLLFunc');
if @DllFuncCall <> nil then
begin
Result := DllFuncCall(S2);
//Use S2 for some means .
end;
end;
end;