PDA

View Full Version : پیغام خطا در استفاده دینامیک از DLL



یاسر احسانی
سه شنبه 13 مرداد 1383, 21:51 عصر
دوستان عزیز :
من یه DLL نوشتم و سپس به صورت دینامیک در یه برنامه اونو فراخونی کرم . اما بعد از اجرای برنامه و دادن پیام مناسب پیام زیر رو میده !!!؟؟؟
:?:

orion188
سه شنبه 13 مرداد 1383, 22:05 عصر
سلام
طریقه فراخوانی رو هم ذکر میکنید؟

یاسر احسانی
جمعه 16 مرداد 1383, 18:59 عصر
سلام

طریقه فراخوانی رو هم ذکر میکنید؟


private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
DLLhandle:THandle;
function GetHardDiskSerial(DriveLetter:Char):String; external 'Test1';
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
type
Todd=function(DriveLetter:Char):String;
var
GetHardDiskSerial:todd;
begin
@GetHardDiskSerial:=getprocaddress(DLLhandle,'GetH ardDiskSerial');
try
ShowMessage(GetHardDiskSerial('c'));
except
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
DLLhandle:=LoadLibrary('Test1');
if DLLhandle=0 then
begin
ShowMessage('Not Load DLL');
close;
end;
end;

end.

مهدی کرامتی
جمعه 16 مرداد 1383, 19:10 عصر
1- من یک چیز را نمی‌فهمم. اگر شما تابع را بصورت استاتیک تعریف کرده‌اید:

function GetHardDiskSerial(DriveLetter:Char):String; external 'Test1';
چرا مجددا میخواهید آنرا بصورت دینامیک تعریف کنید؟

2- چرا کلمه کلیدی StdCall را قبل از کلمه external در مثال فوق درج نکرده‌اید؟

3- شما سعی کرده‌اید یک String را از خروجی تابعی که در DLL تعریف شده است دریافت کنید. این صحیح نیست. بجای string از pchar استفاده کنید.