2011-08-20 18 views
5

Bir DELPHI uygulaması için harici bir modül sisteminin uygulanmasının en iyi yolu nedir? Ben gerekenlerDış modüllerin uygulanması

gerçekten çok temel: bir modül mevcutsa ve yükleri o (Run süresi)

  • Modüller formu saklayabilirsiniz eğer

    • ana APP
    • Modüller DataModules
    • saklayabilir algılar
    • Modüller ben kullanacağım diğer formları içine mağaza formlarını gerekir ve sadece bağımsızolarak kodu

    mağaza edebilirsiniz

    Ben Yani bir TForm oluşturmak, ancak bir TPanel içine yerleştirin bu

     if Assigned(pNewClass) then begin 
          Application.CreateForm(pNewClass, _lFrm); 
          _lFrm.Hide; 
          _lFrm.BorderStyle := bsNone; 
          _lFrm.Parent := pBasePNL //(TPanel); 
          _lFrm.Align := alClient; 
         end; 
    

    gibi bir şey kullanın.

    DataModules gelince usally mağaza ImageLists böylece ideia sadece harici bir modül değişen bit uygulama ICO'lara değiştirmektir.

    Yani bu ulaşmanın en iyi yolu nedir?

    çalışma zamanı BPLS baktı ama bunu nasıl anlamak görünmüyor. Teşekkürler.

    GÜNCELLEME:

    .....................................

    Bazı ilgili soruları ve cevapları okuduktan sonra cevabımı ve çözüm bulduğumu düşünüyorum.

    http://edn.embarcadero.com/article/27178

    makale eski şeyler ama son derece basittir.

    Eh mantık  Ben sadece formları göster almak görünmüyor orada

    Sadece örnek 2

    O BPL yükler, ancak Formu almaz test ediyorum:

    AClass := GetClass('TForm2'); 
    

    kayıtlı olarak daima retrievex 'nil'

    Ama BPL:

    herkes bu biriyle yardımcı olabilir.

  • +1

    Eklentiler için bakarsanız daha fazla bilgi bulabilirsiniz –

    +0

    Bu gerçekten bir yinelenen, sadece ilgili soruların listesine bakın doğru –

    +0

    Sadece yaptım, teşekkürler. Sadece çözümümü orada buldum. – Jlouro

    cevap

    2

    Size bir demo yaptım, başlamak çok kolay! Ancak ... Başlamadı.

    Her defasında eklentiler kullanmaya başladım, daha sonra pişman oldum. Ancak, dediğiniz gibi, bir ikili eklenti sistemi istiyorsunuz. Yani BPL'ler doğru çözümdür. David, arayüzleri (tam çalışma zamanı paketi BPL yerine düz DLL'lerle) kullanmayı önerir ve bu, sınıflarınızı uyarlamadığınızdan ve karşılaştığınız Uygulama ve paket-ikili uyumluluk bağımlılıklarından dolayı sık karşılaşılan BPL kararsızlık sorunlarından bazılarını çözer. uygun şekilde. Eğer bellek paylaşmak ve borlandmm.dll (paylaşılan bellek yönetimi) kullanmanız gerekmiyorsa, arayüzleri ile düz bir DLL düzgün çalışacaktır.

    Sadece komut dosyası ile yapmanız gereken her şeyi yapabilir ve eklenti sisteminizi yalnızca komut dosyaları ile yapabilirseniz, o şekilde yapın. DLL'lerden, arabirimlerden ve bellek paylaşımından kurtulursanız, düz DLL'leri kullanın. Bellek ve sınıf türlerini paylaşmanız gerekiyorsa, evet, BPL'leri kullanın.

    BPL'lerin (Çalışma Zamanı Paketleri) kullanılmasının beklemediğiniz pek çok yan etkiyle birlikte geldiğinden emin olun. Üzerinde çalıştığım en büyük BPL tabanlı uygulamalar, üzerinde çalıştığım tüm monolitik uygulamalardan daha karışık ve daha az kararlıydı. Görünüşe göre, sadece denemeye başlayana kadar paketler için çamura olabilir, ve sonra, buluyorum, tekrar monolithler için çamur bulurum.

    BPL paketlerini doğru kullanırsanız ve eklentilerinizi doğru şekilde yüklerseniz, her şey yolundadır. BPL'ler harika. Ama gerçek dünyada, aklı başında sürüm oluşturma ve ABI uyumluluğu ve birlikte çalışabilirlik ve istikrarın bir prim olduğu görülmektedir.

    Güncelleme: Ben here (plugin_r2.zip) var size bir demo yaptı. Delphi XE'de yapıldı, ancak delphi'nin eski bir sürümünü kullanıyorsanız, sadece .dproj dosyalarını silip ana uygulama için .dpr dosyasını ve paket için .dpk dosyasını açın.

    +0

    İhtiyacım olan şey, formları, veri modülleri ve kaynakları bir BPL içinde saklamak. Amaç, ana APP için istemciye verdiğim veya vermediğim ekstra modüller yaratmaktır. Ana yapıyı her kurduğumda modülleri (BPL'ler) yeniden yapıyorum. DELPHI sürümü, 2007'de çalıştığım bir sorun değil ve bunu bir süre daha geniş tutmayı planlıyor. Şimdi ne çalışmıyor, GetClass. – Jlouro

    +0

    Size bir demo yaptım, yukarıdaki cevabı en son bağlantıya bakın! Delphi XE kullanmıyorsanız, DPROJ dosyasını silin ve .dpr dosyasını açın ve hala çalışmalıdır. –

    +0

    DEMO için teşekkürler, ancak "mainFormMainUnit1.pas" eksik. – Jlouro

    4

    Paketler kolay bir çözümdür ancak bir büyük dezavantajı var. Paketleri kullanmak, eklenti yazarlarını sadece Delphi'yi değil, aynı zamanda derleyicinin kullandığınız sürümü de kullanmaya zorlar.

    Ben şahsen birkaç arayüz aracılığıyla uygulamanın işlevselliğini ortaya çıkarmak için tercih ediyorum. Bu Delphi dışındaki dillerden erişilebilirlik sağlar.Tipik olarak eklenti bir DLL içinde uygulanacak ve uygulamanın, uygulamayı temsil eden kök arabiriminde geçmesi için çağıracağı bir işlevi dışa aktacaktır. Eklenti daha sonra bu arayüzün yöntemlerini çağırır ve böylece iki yönlü bir etkileşim kurar.

    +1

    Datamodules ve Delphi formlarını soru durumları olarak döndürmek istiyorsa, bu tavsiye yararlı değildir. İade edilen formlar Delphi ve versiyona bağlı –

    +0

    olmasına rağmen, insanları köpekbalığı musallat sularından uzaklaştırmak iyi bir fikirdir. Böylece, David için +1. –