Como acessar DLL remota?

Delphi

17/11/2004

Pessoal,

imaginem uma LAN onde eu queira acessar de uma máquina uma DLL em outra máquina. Como eu poderia fazer isto?


Abraços...
Anderson Dibo


Anddibo

Anddibo

Curtidas 0

Respostas

Bruno_fantin

Bruno_fantin

17/11/2004

Sim...


GOSTEI 0
Gurc

Gurc

17/11/2004

Sim...
Sim?? :?:


Bom, hoje você pode usar o DataSnap para isso ou então fazer o download da DLL e carregá-la na memória local. Se você não tem nenhuma experiência com DataSnap e precisa disso urgentemente tente a segunda alternativa. Você pode usar os componentes do Indy para fazer o download.
Até mais,
Gustavo Royer Chaurais


GOSTEI 0
Massuda

Massuda

17/11/2004

Apenas por curiosidade... o que exatamente você está querendo fazer?

Se for uma DLL que implementa COM, tem mecanismos próprios de RPC do Windows para isso.

Se for uma DLL normal, ela será carregada pelo seu programa se ela estiver em uma pasta compartilhada na rede, acessível aos usuários (permissão de leitura) e estiver no PATH da máquina onde o programa estiver sendo executado (acho que isso significa necessariamente que a pasta na rede deve estar mapeada em um drive da máquina).


GOSTEI 0
Anddibo

Anddibo

17/11/2004

Apenas por curiosidade... o que exatamente você está querendo fazer?


Obrigado pelo retorno pessoal.

Massuda, a idéia é simples: imagine um programa (1) instalado em uma máquina (1) e um programa (2) instalado em uma máquina (2), ok?

Imagine agora que o programa 2 possui poblicados alguns métodos que ativam certas funcionalidades internas, como por exemplo ´Mostrar um determinado form na tela´, ok?

O meu objetivo é que a partir da máquina 1 eu pudesse acessar o programa 2 e seus métodos. Desta forma, remotamente, eu ativaria as funcionalidades do programa 2.

Pensei em fazer o programa 2 em uma DLL porque eu poderia publicar os métodos de forma que um programa externo poderia acessá-los (só não sei como faria isto remotamente, estando o programa 1 em outra máquina).

Se tiver uma alternativa melhor, por favor, gostaria de saber.


Abraços...
Anderson Dibo


GOSTEI 0
Bruno_fantin

Bruno_fantin

17/11/2004

Acho que no seu caso o DataSnap não seria ideal...

O melhor mesmo seria fazer isso usando socket de TCP/IP...

O programa 1 se conecta a maquina 2 e envia um texto qualquer... O programa 2 recebe o texto e de acordo com o texto ele faz alguma coisa...

Falou...


GOSTEI 0
Massuda

Massuda

17/11/2004

[...]a idéia é simples: imagine um programa (1) instalado em uma máquina (1) e um programa (2) instalado em uma máquina (2), ok? Imagine agora que o programa 2 possui poblicados alguns métodos que ativam certas funcionalidades internas, como por exemplo ´Mostrar um determinado form na tela´, ok? O meu objetivo é que a partir da máquina 1 eu pudesse acessar o programa 2 e seus métodos. Desta forma, remotamente, eu ativaria as funcionalidades do programa 2. Pensei em fazer o programa 2 em uma DLL porque eu poderia publicar os métodos de forma que um programa externo poderia acessá-los (só não sei como faria isto remotamente, estando o programa 1 em outra máquina).


Na situação que você está pensando usar isso, a DLL implementaria algum elemento visual do programa ou seria apenas algum tipo de processamento não visual?

No caso de processamento não visual, você pode adotar uma arquitetura cliente/servidor onde a máquina 2 atuaria como um servidor de aplicação para o programa na máquina 1. Por exemplo, o servidor de aplicação poderia realizar uma análise de crédito para um determinado CPF e retornar aprovado/reprovado para a máquina 1. Nesse caso, a comunicação entre as máquinas pode ser feita basicamente via TCP/IP (por exemplo, use TIdTCPServer/TIdTCPClient do Indy).

No caso de você estar pensando em elementos visuais do programa, um ponto de partida seria a DLL numa pasta da máquina 2 compartilhada na rede e mapeada em um drive da máquina 1, de modo que o programa na máquina 1 seja capaz de carregar a DLL.

Um desdobramento mais sofisticado seria implementar um sistema de plugin no seu programa. Se inglês não for problema, implementações comerciais de plugins pode ser vistas [url=http://www.remobjects.com/page.asp?id={84F6BA20-8322-4C2F-8D22-4409CD6DCDA6}]aqui[/url], [url=http://www.tmssoftware.com/tpf.htm]aqui[/url] e [url=http://www.athrasoft.com/en/Home.htm]aqui[/url]; uma implementação free está disponível no [url=http://sourceforge.net/projects/jvcl/]Jedi VCL[/url].

Dependendo do caso, sei que pode ser mais interessante desenvolver um BPL ao invés de uma DLL, mas neste instante, não lembro a razão exata disso.


GOSTEI 0
Anddibo

Anddibo

17/11/2004

Na situação que você está pensando usar isso, a DLL implementaria algum elemento visual do programa ou seria apenas algum tipo de processamento não visual?


Teria elementos visuais sim, pois gostaria de abrir remotamente um formulário (TForm) do programa 2, por exemplo.

No caso de você estar pensando em elementos visuais do programa, um ponto de partida seria a DLL numa pasta da máquina 2 compartilhada na rede e mapeada em um drive da máquina 1, de modo que o programa na máquina 1 seja capaz de carregar a DLL.


Vou fazer o teste. Achei interessante!

Um desdobramento mais sofisticado seria implementar um sistema de plugin no seu programa. Se inglês não for problema, implementações comerciais de plugins pode ser vistas [url=http://www.remobjects.com/page.asp?id={84F6BA20-8322-4C2F-8D22-4409CD6DCDA6}]aqui[/url], [url=http://www.tmssoftware.com/tpf.htm]aqui[/url] e [url=http://www.athrasoft.com/en/Home.htm]aqui[/url]; uma implementação free está disponível no [url=http://sourceforge.net/projects/jvcl/]Jedi VCL[/url].


English isn´t a problem! :) Gostei! Vou dar uma olhada, obrigado.


Abraços...
Anderson


GOSTEI 0
Anddibo

Anddibo

17/11/2004

Acho que no seu caso o DataSnap não seria ideal... O melhor mesmo seria fazer isso usando socket de TCP/IP... O programa 1 se conecta a maquina 2 e envia um texto qualquer... O programa 2 recebe o texto e de acordo com o texto ele faz alguma coisa... Falou...



Ok, ´brigadão´ Bruno!


Abraços...
Anderson Dibo


GOSTEI 0
POSTAR