Compartilhar uma conexao entre dois programas exe diferentes

21/01/2010

4

Existe alguma maneria de compartilha uma conexão entre dois EXE's diferentes?

Temos um grande sistema todo desenvolvido como BPL's, agora vamos desenvolver um novo módulo no método tradicional Delphi EXE.

O sistema principal parte de um EXE que conecta e chama dinamicamente as BPLs e monta o menu do sistema.

Neste menu terá uma chamada ao EXE do novo módulo. Gostaríamos de passar para o EXE a conexão (um componente Zconnection).

Tentamos passar através do endereço de memória e string na chamada do EXE, mas não consigo atribuir um endereço de memória ao objeto Zconnection do segundo EXE. Tentei com ponteiros mas acho que está operação não existe né?


EXE_BPL --> conecta Zconnection
EXE_BPL --> chama EXE_NOVO passando endereço de memória do Zconnection como parametro string

EXE_NOVO --> Zconnection <-- endereço de memoria passado *** :( aqui nao consegui.


Desde já agradeco.


Responder

Posts

oi Julia,   Vc conseguiu compartilhar a conexão entre os executáveis?   Trabalho com Oracle e estou tendo o mesmo problema, pois o Oracle tem um numero máximo de conexões e quero deixar somente uma conexão por usuário do meu sistema.   Hoje já tenho isso com a DCOM (uma conexão por usuário), mas estamos querendo retirar a DCOM.   Um abraço. Fernando.
Responder

20/05/2010

Emerson Lara

Olá Julia,   Também temos uma aplicação em bpls aqui na empresa que trabalho só que empacotamos tudo endividualmente inclusive o nosso datamodule de conexão e carregamos dinamicamente tb, não seria o caso de vc empacotar a sua conexão, foi trabalhoso mas conseguimos empacotar toda aplicação cada cadastro e suas respectivas grids, outra alternativa é vc usar o datasnap 2010.
Responder
Julia...   Foi só sair pro almoço e esfriar a cabeça que consegui fazer.   A solução para o que vc quer deve ser mais ou menos assim...   No primeiro programa vc deve pegar o endereço de memória do componente e jogar numa variável do tipo integer. Conforme abaixo:  
 
procedure TPrograma1.Button1Click(Sender: TObject);
var
   iteste: integer;
begin
   // pega o endereço da memória
   iteste := Integer(Conexao);
   // chama o outro programa passando o endereço.
   WinExec(PChar('D:\C_Fontes\ADM\Projeto\programa2.exe ' + IntToStr(iteste)),SW_SHOWNORMAL)
end;

No segundo programa vc deve ler o endereço e atribuir ao componente de conexão, conforme abaixo:  
 
procedure TPrograma2.FormCreate(Sender: TObject);
begin
   // Cria o componente em tempo de execução
   Conexao := TOracleSession.Create(Self);
   // Se não vir o parametro eu conecto novamente
   if Trim(ParamStr(1)) = '' then
   begin
      Conexao.LogonDatabase := 'BASE';
      Conexao.LogonUsername := 'USUARIO';
      Conexao.LogonPassword := 'Senha';
      Conexao.Connected := True;
   end
   else
   begin
     // Se vier o parametro eu utilizo a mesma conexão
      ShowMessage(ParamStr(1));
      Conexao := TOracleSession(StrToInt(ParamStr(1)));
      if Conexao.Connected then
        ShowMessage('Conectado')
      else
        ShowMessage('Não Conectado');
   end;
end;
  A única coisa que ainda não testei é se o usuário fechar a primera aplicação se a conexão será fechada ou não. Quando eu conseguir simular eu posto aqui novamente.   Obs.: Fiz isso baseado em uma idéia postada em http://www.mail-archive.com/delphi-br@yahoogrupos.com.br/msg45600.html    Um abraço Fernando.
Responder
Pessoal,   O problema do que passei acima é que ao fechar a primeira aplicação perde-se a conexão.   Para suprir o que preciso sem perder a conexão não vou deixar fechar a primeira aplicação enquanto as demais não forem fechadas.   Um abraço Fernando.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira