“#pragma package(smart_init)”



Sintaxe:

#pragma package(smart_init)

#pragma package(smart_init, weak)


Descrição: smart_init argument


A diretiva #pragma package(smart_init) é utilizada durante a inicialização do aplicativo. Ela assegura que qualquer unidade de códigos requisitada pelo programa será inicializada na segqüência correta, ou seja, serão inicializadas na ordem determinada por suas dependências (Incluída por default no pacote arquivo fonte). Tipicamente, você pode usar o #pragma package para arquivos .CPP que são criados como packages.


Esta diretiva pragma afeta a ordem de inicialização desta unidade de compilação. Para units, a inicialização ocorre na seguinte ordem:


1. Pelas suas dependências de "usos", quer dizer, se unitA depende de unitB, unitB deve ser inicializa antes de unitA.


2. A ordem de vínculo.


3. Ordem de prioridade dentro da unit.


para arquivos .OBJ regulares (aqueles não construídos como units), a inicialização acontece primeiro de acordo com a ordem de prioridade e, então, de acordo com a ordem de vínculo. Mudando a ordem de vínculo dos arquivos .OBJ muda-se a ordem na qual os objetos construtores globais são chamados.

Os exemplos seguintes mostram como a inicialização difere entre units e arquivos .OBJ regulares.


Tome como um exemplo três arquivos unit, A, B e C que são “inteligentemente inicializados” com #pragma package(smart_init) e possuem valor de prioridade (definidas no parâmetro prioridades do #pragma startup) setados de 10, 20 e 30. As funções são nomeadas de acordo com os seus valores de prioridades e o parent .OBJ. assim os nomes são a10, a20, a30, b10, e assim por diante.


Desde que todas as três são units, e se A usa B e C e a ordem de vínculo é A, B e então C, a ordem de inicialização é:


B10 B20 B30 C10 C20 C30 A10 A20 A30


Se, ao invés de units, o arquivo anterior fosse .OBJ a ordem seria:


A10 B10 C10 A20 B20 C20 A30 B30 C30


Os arquivos .CPP que usam #pragma package(smart_init) também requerem que algum #pragma link referencie outro arquivo .OBJ desde um arquivo .CPP que declara #pragma package(smart_init), e deve estar resolvido na unit. Se #pragma link fizer referências para arquivos não .OBJ pode ainda ser resolvido por bibliotecas etc.


Descrição: weak packages


A diretiva #pragma package(smart_init, weak) afeta o modo que um arquivo .OBJ é armazenado num package’s .BPI e arquivos .BPL. Se #pragma package(smart_init, weak) aparece em um arquivo de unit, o compilador omite a unit de BPLs quando possível, e cria uma cópia local non-packaged da unit quando ela é requerida por outra aplicação ou package. Uma unit compilada com esta diretiva é dita como sendo “weakly packaged”.


#pragma package(smart_init, weak) é usado para eliminar conflitos entre packages que possivelmente dependem da mesma biblioteca externa.


Arquivos Unit contendo a diretiva #pragma package(smart_init, weak) não devem ter variáveis globais.


para maiores informações sobre uso weak packages, veja Weak packaging.



anterior

índice

próxima


HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO