GARANTIR DESCONTO

Fórum Passando parâmetros para uma BPL #300145

20/10/2005

0

Pessoal quero passar referências de objetos para uma pacote.

Até o momento só utilizei DLLs e se fosse uma dll eu simplismente declararia o método com a assintura contendo os parâmetros que necessito.

Como fazer isso em uma BPL?


Andremuller

Andremuller

Responder

Posts

21/10/2005

Andremuller

respondendo de mim para mim mesmo.

No meu caso isso resolve.
Transformo os classes compartilhadas em singleton.
Ao carregar o pacote ele acessa a instância da singleton por um GetInstance e pronto.


Responder

Gostei + 0

21/10/2005

Renatacoimbra

Bem, vc já respondeu sua pergunta, mais vai aí.

Funciona da mesma forma da DLL

vc declara seu método no form e exporta.

function MeuMetodo :Tipo;
begin
// código
end;

exports
MeuMetodo;


Responder

Gostei + 0

21/10/2005

Andremuller

eu exporto o método de uma classe ou escrevo isso na unit do pacote?

De que forma eu acesso o método?
Por que se eu tiver que dar um GetClasse e fazer algo do tipo

ClassePegaPeloGetClasse.ObjetoCompartilhado := ObjetoDaAplicação

então não serve porque eu teria igual que declarar a unit da classe no projeto principal para ele reconhecer o método, o que implicaria na compilação da unit no exe.

Porém se de alguma forma eu puder trabalhar de forma semelhante a um GetProcAdress então tá ok


Responder

Gostei + 0

21/10/2005

Renatacoimbra

Um exemplo prático usando o [color=red:7d21b65cb4]GetProcAddress[/color:7d21b65cb4]

No Form declare método:


function CriarNovoFormCli : TForm;
begin
  CriarNovoFormCli := TFormCli.Create( Application );
end;

exports
    CriarNovoFormCli;
end.



Digamos que eu tenha mais de um Form dentro da BPL então eu usaria
um método para carregar a BPL passando o form como parâmetro.


procedure InstForm( const Package, NomeForm : ShortString );
var h : THandle;
    f : TForm;
    CriarNovoForm : function : TForm;
begin
     h := LoadPackage( Package );
     if h <> 0 then begin
        @CriarNovoForm := GetProcAddress( h, PChar( ´CriarNovo´ + NomeForm ) );
        if Assigned(CriarNovoForm) then begin
           CriarNovoForm;
        end;
     end;
end;




acho q isso pode te ajudar.


[]´s[/code]


Responder

Gostei + 0

22/02/2008

Host

Para fazer uma chamada para um bpl ... como ficaria... como funciona la por dentro este esquema de exportar?

O [b:e7ad659c1f]@CriarNovoForm[/b:e7ad659c1f] esta relacionado com
[b:e7ad659c1f]CriarNovoForm : function : TForm;[/b:e7ad659c1f] mas esta function esta relacionada com a function abaixo?

function CriarNovoFormCli : TForm;
begin
CriarNovoFormCli := TFormCli.Create( Application );
end;

Como funciona a mecanica disto.


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar