Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Internet
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 25-04-2010
Avatar de HombreGordo
HombreGordo HombreGordo is offline
Miembro
 
Registrado: Jul 2008
Posts: 41
Poder: 0
HombreGordo Va por buen camino
Unhappy DLL y TCPClient (o ClientSocket)

Saludos cordiales a todos,

Desde hace algún tiempo me he interesado por la escritura de programas sin GUI, con Delphi (el IDE al que ya estoy acostumbrado), sin embargo lo encuentro un poco difícil para algunas cosas, debido a mi inexperiencia en el campo.

Sucede que quiero escribir un DLL que trabaje en cierta forma como una aplicación, que cuando la ejecute con rundll32 ejemplo.dll,DllMain se mantenga abierta y que responda a las conexiones con los objetos correspondientes a los cuales les asigno comandos. Yo puedo lograr esto perfectamente para un ejecutable, pero no para un DLL, y he aquí mi duda.

Tengo el siguiente código:
Código Delphi [-]
library ejemplo;

uses
  SysUtils,
  Classes,
  Dialogs,
  Sockets,
  ShellApi;

var
DLLHandle: Longint = 0;
TCPClient: TTCPClient;
sRecr : string;

{$R *.res}

procedure DllMain; export;
begin
while (1 = 1) do begin
  ReadSocket;
end;
end;

procedure ReadSocket;
begin
sRecr:=TCPClient.Receiveln('');
sRecr:=Trim(sRecr);
if sRecr = 'test' then
  begin
    ShowMessage('Probando.');
  end;
end;

exports DllMain;

begin
TCPClient:=TTCPClient.Create(nil);
TCPClient.RemotePort:='6999'; // el puerto de escucha
TCPClient.RemoteHost:='127.0.0.1'; // aquí tengo una app con un TServerSocket escuchando
TCPClient.Active:=True;
ShellExecute(DLLHandle, 'open', 'calc', nil, nil, 4);  // me aseguro de que este bloque se ejecute
end.

En el DllMain intenté hacer como una especie de loop, para que interpretara esos mensajes que yo le enviara por la otra aplicación. Sin embargo, justamente cuando cierro la otra aplicación, que el ShowMessage hace efecto. ¿Alguna idea? (Debería hacer efecto cuando yo envíe el comando)

PD: Creo que se podría complicar con los componentes Indy, y por eso no los empleo. Por eso tengo en cierta forma mi propio parser de comandos sencillo y "buggy".
PD2: Me gustaría que me ayudasen ya sea con TCPClient o ClientSocket, realmente no tengo problemas en usar alguno de los dos (aunque me manejo más con ClientSocket).
__________________
Aprendiz de Embarcadero RAD Studio...

Última edición por HombreGordo fecha: 25-04-2010 a las 11:10:23.
Responder Con Cita
  #2  
Antiguo 25-04-2010
Avatar de DriverOp
DriverOp DriverOp is offline
Miembro
 
Registrado: Aug 2007
Posts: 93
Poder: 12
DriverOp Va por buen camino
Me parece que el problema lo tienes en la otra aplicación porque Receiveln() se ejecuta hasta que aparece un retorno de carro (o la conexión se cierra).

Pero el código que has puesto me hace pensar que lo que quieres hacer es que esta DLL sea un servidor, no un cliente, entonces deberías usar un componente servidor TCP.
Responder Con Cita
  #3  
Antiguo 25-04-2010
Avatar de HombreGordo
HombreGordo HombreGordo is offline
Miembro
 
Registrado: Jul 2008
Posts: 41
Poder: 0
HombreGordo Va por buen camino
Smile

Gracias por su ayuda, Ud. tiene la razón jejej, es que como Ud. dice, Receiveln se ejecuta cuando encuentra un final de línea, me dí cuenta de cuál final de línea era ese, cuando ví que dice const eol: String = #$D#$A entonces ahí supe que retorno del carro debía enviar (estaba enviando #13+#10 y por eso no se ejecutaba).
__________________
Aprendiz de Embarcadero RAD Studio...
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
TcpClient, TCPServer e Hilos Joacko Internet 3 27-09-2010 19:04:56
TcpClient y TcpServer Caro OOP 2 01-10-2008 19:32:34
Incluir TCPClient en DLL Lambda Internet 0 03-07-2007 21:59:17
tcpserver y tcpclient ajgesino Internet 2 23-01-2005 19:16:35
txpserver y tcpclient en indy VIRU Internet 5 10-05-2003 06:09:09


La franja horaria es GMT +2. Ahora son las 17:22:40.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi