Ver Mensaje Individual
  #1  
Antiguo 25-04-2010
Avatar de HombreGordo
HombreGordo HombreGordo is offline
Miembro
 
Registrado: jul 2008
Posts: 41
Reputación: 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