PDA

View Full Version : يك اشكال عجيب در ارتباط با پكيج



A.Nemati
شنبه 19 آذر 1390, 16:58 عصر
سلام
من يك پكيج با ساختار زير دارم

unit Unit1;

interface
uses Dialogs, Classes;

type
TTestClass1 = class(TPersistent)
function HelloFromClass(AName: AnsiString): AnsiString;
end;

implementation

{ TTestClass1 }

function TTestClass1.HelloFromClass(AName: AnsiString): AnsiString;
begin
ShowMessage('Hello from package ' + AName);
end;

initialization
Classes.RegisterClass(TTestClass1);

finalization
Classes.UnRegisterClass(TTestClass1);
end.


در برنامه اي كه قراره از اين پكيج استفاده كنه اينطوري عمل كردم

procedure TForm1.Button1Click(Sender: TObject);
var
pkg: HMODULE;
scProc: function(AName: TParams): AnsiString;
pc: TPersistentClass;
ttClass: TTestClass;
begin
pkg := LoadPackage(ExtractFilePath(ParamStr(0)) + 'Package1.bpl');
if pkg = 0 then
ShowMessage('Error')
else
try
pc := GetClass('TTestClass1');
if pc <> nil then
begin
ShowMessage('Class Founded');
@scProc := pc.MethodAddress('HelloFromClass');
if Assigned(@scProc) then
scProc('User');
end;
finally
UnloadPackage(pkg);
end;
end;


ظاهرا كلاس و متد داخل آن پيدا مي شن اما رشته اي كه بجاي پارامتر AName پاس مي شه كاملا عجيبه. توي تريس متوجه شدم كه انگار يك بلوك بزرگ از حافظه بجاي پارامتر پاس مي شه.
علت و راه حل چيست؟