2009-03-31 5 views
7

Ich habe eine Einheit weicht definiert TBLA und den folgenden Code in dem initialize Abschnitt:Loadpackage Anrufe initialisieren, aber register wird nicht funktionieren

initialization 
    RegisterClass(TBla); 
    showMessage('registered'); 

Dieses Gerät ist in einem Paket. OK.

In einem Button-Klick auf meine app habe ich den folgenden Code:

LoadPackage('C:\temp\testes_packs\pack1\Package1.bpl'); 
    pc := GetClass('TBla'); 
    if pc = nil then 
    ShowMessage('didnt work'); 

Wenn ich auf die Schaltfläche klicken die 'registriert' Meldung erscheint. Aber "hat nicht funktioniert" zeigt auch. Das zeigt an, dass die Initialisierung aufgerufen wurde, aber die Registerklasse aus irgendeinem Grund nicht funktionierte.

Ok, um zu beweisen, dass das LoadPackage das Problem war, habe ich meine Unit (die TBla-Klasse enthält) direkt in mein Projekt eingefügt und die loadPackage-Zeile entfernt und tada die "registrierte" Nachricht zeigt und die getClass funktioniert.

Irgendwelche Ideen?

Antwort

13

Ihr Paket muss "rtl" und "vcl" in die Liste "requires" aufnehmen. Auf diese Weise ist die Klassenregistrierungsliste die Liste im freigegebenen Paket und nicht privat für Ihr eigenes Paket.

Außerdem muss Ihre Anwendung kompiliert werden, um Laufzeitpakete zu verwenden. Insbesondere müssen die Pakete "rtl" und "vcl" in der Liste der Laufzeitpakete enthalten sein.

Ohne diese beiden Dinge zu tun, wird die von einem Modul verwendete Klassenregistrierungsliste nicht mit der vom anderen Modul verwendeten Liste übereinstimmen. Sie müssen beide das gleiche verwenden, und die Vorgehensweise besteht darin, sicherzustellen, dass beide Module die von RTL veröffentlichte Liste teilen.

+0

perfekt. Vielen Dank. –

Verwandte Themen