BPL içindeki forma erişme (Yarısı çözüldü :) )

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
Cevapla
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

BPL içindeki forma erişme (Yarısı çözüldü :) )

Mesaj gönderen Lost Soul »

S.A.
iki gündür bu mesele ile uğraştım çözüm bulamadım.
Amacım Common.bpl olarak oluştrudğum ortak dialogları barındıran bir Package'deki formlardan lazım olana ulaşmak.

Embarcadeno.com daki aşağıdaki örneği denedim

Kod: Tümünü seç

var
  PackageModule: HModule;
  AClass: TPersistentClass;
begin
  PackageModule := LoadPackage('Package1.bpl');
  if PackageModule <> 0 then
  begin
    AClass := GetClass('Tcariliste');

    if AClass <> nil then
      with TComponentClass(AClass).Create(Application)
        as TCustomForm do
      begin
        ShowModal;
// Forma erişseydim burada bir kaç satır daha kod olacaktı ama erişemedim bi türlü :S
        Free;
      end;

    UnloadPackage(PackageModule);
  end;
end;

baktım olmadı aşağıdaki gibi bir kod yazdım

Kod: Tümünü seç

var s: String;
PCommon : HModule;
AClass: TFormClass;
AForm : Tform;
begin
s:=  extractfilepath(application.ExeName)+'Common.bpl';


if PCommon<>0 then
  try
  UnloadPackage(PCommon);
  except
  end;
if PCommon<>0 then
try
  FinalizePackage(PCommon);
  except
  end;
PCommon:=LoadPackage(s);
  if PCommon <> 0 then
  begin
    AClass :=TFormClass(GetClass ('Tcariliste'));//GetClass('Tcariliste');
    if Assigned (AClass) then
      begin
      AForm := AClass.Create (Application);
      Aform.ShowModal;
// Forma erişseydim burada bir kaç satır daha kod olacaktı ama erişemedim bi türlü :S
      Aform.Free;
      end;
    UnloadPackage(PCommon);
  end;
end;
her ikisinde de AClass değişkeni nill olduğundan doğal olarak forma erişmem mümkün olmuyor.
öyle olmadığını biliyordum ama bi ihtimal diyip belki create olmadığı için class geri dönüş yapmamıştır diyip, Package içerisinde create edeyim dedim yok gene tık yok.
package içerisine checkpointler yerleştirdim package de bir sorun yok.
interneti talan ettim. Package içindeki function ve procedurlere erişim için bi ddünya örnk var ama form için bişey yok .

Acaba bana package içerisindeki formları çağırmaya örnek bir kod verebilir misiniz.
En son Lost Soul tarafından 07 Nis 2009 03:10 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
Lost Soul
Üye
Mesajlar: 1064
Kayıt: 01 Nis 2007 02:55
Konum: mekan ANKARA toprak ELAZIĞ
İletişim:

Re: BPL içindeki forma erişme

Mesaj gönderen Lost Soul »

Problemi aşağıdaki kod ile çözdüm

Kod: Tümünü seç

var s: String;
PCommon : HModule;
AForm : Tform;
begin
s:=  extractfilepath(application.ExeName)+'Common.bpl';
PCommon:=LoadPackage(s);
  if PCommon <> 0 then
  begin
    Aform := Application.FindComponent('cariliste') as TForm;
      Aform.ShowModal;
    if PCommon<>0 then
    try
    UnloadPackage(PCommon);
    except
    end;
    if PCommon<>0 then
    try
    FinalizePackage(PCommon);
    except
    end;
  end;
end;
Bu işlem normal uygulamada sorunsuz çalışıyor.
Ancak bu kodu DLL içinde kullandığım zaman aşağıdaki gibi bir hatayla karşılaşıyorum

Access violation at address 017A5930 in module 'CommonInterFace.dll'. Read of address 00000000.

dll için ayrıca bişey mi yapmam gerekiyor.
Cevapla