Passando parâmetros para uma BPL
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?
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
Curtidas 0
Respostas
Andremuller
20/10/2005
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.
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.
GOSTEI 0
Renatacoimbra
20/10/2005
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;
Funciona da mesma forma da DLL
vc declara seu método no form e exporta.
function MeuMetodo :Tipo;
begin
// código
end;
exports
MeuMetodo;
GOSTEI 0
Andremuller
20/10/2005
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
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
GOSTEI 0
Renatacoimbra
20/10/2005
Um exemplo prático usando o [color=red:7d21b65cb4]GetProcAddress[/color:7d21b65cb4]
No Form declare método:
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.
acho q isso pode te ajudar.
[]´s[/code]
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]
GOSTEI 0
Host
20/10/2005
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.
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.
GOSTEI 0