Domanda

Ho goduto unità definisce TBLA e il seguente codice nella sezione di inizializzazione:

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

Questa unità è all'interno di un pacchetto. OK.

In un bottone cliccare su mia app ho il seguente codice:

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

Quando si fa clic sul pulsante il messaggio 'registrati' si presenta. Ma, 'non ha funzionato' mostra troppo. Il che indica che il WASS di inizializzazione chiamato ma la classe registro per qualche motivo non ha funzionato.

Ok, per dimostrare che il LoadPackage era il problema, ho inserito la mia unità (che contiene classe TBLA) direttamente nel mio progetto e rimosso la linea loadPackage e, tada il messaggio 'registrati' mostra e il getClass funziona.

Tutte le idee?

È stato utile?

Soluzione

La confezione deve includere "rtl" e "VCL" nella sua "richiede" lista. In questo modo, l'elenco di classe-registrazione sarà quello nel pacchetto condiviso e non privato al proprio pacchetto.

Inoltre, l'applicazione deve essere compilato per usare pacchetti di run-time. In particolare, i "rtl" e pacchetti "VCL" hanno bisogno di essere sulla sua lista dei pacchetti in fase di esecuzione.

Senza fare entrambe le cose, l'elenco di classe-registrazione utilizzato da un modulo non sarà la stessa della lista utilizzata dal l'altro modulo. Entrambi devono utilizzare lo stesso, e il modo per farlo è quello di fare in modo che entrambi i moduli condividono la lista esposta dal RTL.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top