2009-03-31 50 views
7

Tengo una unidad de wich define TBLA y el código siguiente en la sección de inicialización:llamadas LoadPackage inicializar, pero registerClass no funcionarán

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

Esta unidad está dentro de un paquete. De acuerdo.

En un clic de botón en mi aplicación tengo el siguiente código:

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

Al hacer clic en el botón del mensaje 'registrado' aparece. Pero, 'didnt work' también se muestra. Lo que indica que se llamó a la inicialización pero que la clase de registro por algún motivo no funcionó.

De acuerdo, para demostrar que LoadPackage era el problema, incluí mi unidad (que contiene clase TBla) directamente en mi proyecto y eliminé la línea loadPackage y, luego, el mensaje 'registrado' y el getClass funciona.

¿Alguna idea?

Respuesta

13

Su paquete debe incluir "rtl" y "vcl" en su lista "requiere". De esta forma, la lista de registro de clase será la del paquete compartido y no privada para su propio paquete.

Además, su aplicación debe compilarse para usar paquetes de tiempo de ejecución. En particular, los paquetes "rtl" y "vcl" deben estar en su lista de paquetes de tiempo de ejecución.

Sin hacer ambas cosas, la lista de registro de clase utilizada por un módulo no será la misma que la utilizada por el otro módulo. Ambos tienen que usar el mismo, y la forma de hacerlo es asegurarse de que ambos módulos estén compartiendo la lista expuesta por el RTL.

+0

perfecto. Gracias. –

Cuestiones relacionadas