
Makalede main application'dan form isimlerini kullanarak hem form açma hem de kullanıcı isimlerini o dll ulaştıran bir örnek hazırladım...Umarım yardımım dokunur...
Kod: Tümünü seç
forma dlladi, ve adminmi public kısma 2 tane string global değişken tanımlayalım..Kullanıcı ismi yerine ben kullanıcının nosunu kullanıyorum
//userno diye integer bir değişken tanımlayınız...
//Login formda aldığınız kullanici no ve kullanicinin adminmi olup olmadığını bu değişkenlere atıyoruz...
procedure Dllformcagir(Dlladi : Pchar; Formadi : string; kullanici : integer; ADMINMI : string); //Formunuzun public kısmında bu procedure tanımlayınız
procedure TFrm_main.Dllformcagir(Dlladi : Pchar; Formadi : string; kullanici : integer; ADMINMI : string); //Bu procedure formumuza kopyalayalım...
Handle: integer;
ShowMDIChild: procedure(Application: Tapplication; Formname: string;
kullanici: integer; ADMIN: string);
begin
try
Screen.Cursor := crSQLWait;
handle := LoadLibrary(Dlladi);
if Handle <> 0 then
begin
@ShowMDIChild := GetProcAddress(handle, 'ShowMDIChild');
if @ShowMDIChild <> nil then
ShowMDIChild(Application, Formadi, kullanici, ADMINMI)
else
begin
ShowMessage('HATA : 00001, Çağrılan Procedure Bulunamadı [Stok Modülü]');
end;
end
else
begin
ShowMessage('HATA : 00002, Stokmdl Dll Kütüphanesi Bulunamadı [Stok Modülü]');
FreeLibrary(Handle);
end;
finally
Screen.Cursor := crDefault;
end;
end;
//onlickede hangi dllde ise çağıracağınız form onun adını form adını yazıp çağıralım...
Dllformcagir('stok.dll', 'Frm_stokkartikayit', userno, Adminuser);
Kod: Tümünü seç
library stok;
uses
SysUtils,
Classes,
adodb,
db,
Forms,
Windows,
messages,
dialogs,
inifiles,
activex,
ndmstok in 'ndmstok.pas' {dmstok: TDataModule},
nstokizleme in 'nstokizleme.pas' {Frm_stokizleme3};
var
DllApp: TApplication;
ADMINUSER: string;
constr: string;
kadi: string;
{$R *.res}
procedure ShowMDIChild(MainApp: TApplication; Formname: string; kullanici:integer ; ADMINMI: string); export;
begin
if not Assigned(DllApp) then
begin
DllApp := Application;
Application := MainApp;
end;
if Formname='Frm_stokizleme' then
begin
if not assigned(Frm_stokizleme) then
begin
Frm_stokizleme := TFrm_stokizleme.Create(Application.MainForm);
Frm_stokizleme.FormStyle := fsMDIChild;
Frm_stokizleme.useradi := kullanici; //kullanici adini burada forma taşıyoruz..
Frm_stokizleme.Show;
end;
end;
////Dilediğiniz kadar formun ismine göre form oluşturabilirsiniz....
end;/////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////
procedure DMstokCreate(databaseadi: string); export; ////Datamodule dll den çağırıyoruz...
begin
try
CoInitialize(nil);
try
if not assigned(dmstok) then
begin
Application.CreateForm(Tdmstok, dmstok);
dmstok.stokdm.ConnectionString := databaseadi;
dmstok.stokdm.LoginPrompt := False;
dmstok.stokdm.Connected := True;
end;
except
on e: EClassNotFound do
begin
ShowMessage('Stok Database Bağlantısında Hata. Bağlantı Kurulamadı');
dmstok.Free;
end;
end;
finally
CoUninitialize;
end;
end;
////////////////////////////////////////////////////////////////
///////////////////////////////////////////
procedure MyDLLProc(Reason: Integer);
begin
if Reason = DLL_PROCESS_DETACH then
{ DLL is unloading. Restore the Application pointer. }
if Assigned(DllApp) then
Application := DllApp;
end;
///////////////////////////////////////////
exports
ShowMDIChild,
DMstokCreate;
begin
DLLProc := @MyDLLProc;
end.
Kolay Gelsin...İyi Çalışmalar