Dll ile form çağırma ve kullanıcı adını dll taşıma

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
delphist
Üye
Mesajlar: 595
Kayıt: 05 Oca 2005 04:34

Dll ile form çağırma ve kullanıcı adını dll taşıma

Mesaj gönderen delphist »

S.a. Arkadaşlar...Bu benim ilk makalem :) Çok heyecanlıyım...
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);
Buraya kadar olan kısım main form ile ilgili...



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.

//Yukarıdaki datamodulleri çağırmada tabi eğer farklı şirket datalarına falan bağlanma gibi durumlarınız varsa programda ini dosyalarından okuyup gerekli ayarları yapmanız gerekir...

Kolay Gelsin...İyi Çalışmalar
Cevapla