Projemde bir MDI form var bu form üzerinde dinamik bir menü oluşturuyorum.Bu dinamik menülerin itemlerinin click olaylarında istediğim dll ve dll'in içerisindeki procedure yada fonksiyonu çağıran kodları yazıyorum.Yani programımı dll olarak parçalara ayırdım.bundaki maksadım, son kullanıcılar kendi menülerini tasarlayıp kendi dlllerinide yazarak programa istedikleri ilaveleri yapabilsinler.bunun için dll dosyalarının isimlerini ve içerisindeki fonksiyonların isimlerini bir veritabanından çalışma anında alınacak şekilde dizayn yaptım.dll dosyalarını dinamik olarak çağırma yönteminde offline v3 dosyanızda @vkamadan kardeşimiz gayet güzel açıklamış ve elimdeki diğer kaynaklarda benzer şekilde örnekler verilmiş.ama bir türlü dll dosyasını dinamik olarak çağıramadım. örnek kod ,
Kod: Tümünü seç
procedure TForm6.Button1Click(Sender: TObject);
var
DLLRoutine: procedure;
DLLHandle: THandle;
begin
DLLHandle := LoadLibrary('C:\Documents and Settings\Ferda\Desktop\dll\DLLFormDll.dll');
try
DLLRoutine:=GetProcAddress(DLLHandle, 'KayitFormu');
if Assigned(DLLRoutine) then
DLLRoutine
else
MessageDlg('The specified routine cannot be found.',
mtInformation, [mbOk], 0);
finally
FreeLibrary(DLLHandle);
end; // try..finally
end;
Kod: Tümünü seç
DLLRoutine:=GetProcAddress(DLLHandle, 'KayitFormu');
hata veren satırda DLLRoutine değişkenimin sol tarafına, pointer bilgisi atanabilsin için @ işareti yazıyorum bu sefer de aşağıdaki hatayı veriyor,
Kod: Tümünü seç
[Pascal Error] Unit6.pas(44): E2010 Incompatible types: 'Pointer' and 'IntPtr'