Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-01-2008
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
Write and Read entre aplicaciones

Hola, disculpenme por molestar tanto pero es necesario ya que voy en la parte más complicada de mi proyecto, y se me precentó otro problemilla:

lo que necesito hacer es poder escribir y leer datos entre aplicaciones pero internamente, como la funcion de un troyano, que graba información en el server.exe, eso mismo tengo que hacer, yo utilizo este ejercicio, pero no logro que funcione aver si ustedes me pueden ayudar.

Aqui dejo adjunto un archivo con lo que hago, pero no me funciona al 100% aver si ustedes le echan un vistazo (no ocupa ningún componente en especial).

Gracias y SALU2

Última edición por cmm07 fecha: 26-04-2008 a las 13:58:15.
Responder Con Cita
  #2  
Antiguo 30-01-2008
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
A primera vista te ha fallado la definición del tipo de datos de TSetting, las APIs que utilizas funcionan con punteros, y tu estas haciendo una declaracion de un puntero de un string, pero el string array de caracteres convencional, tiene un indicador del "Length".

Aparte noté que usabas SizeOf(Settings^))... SizeOf toda la vida te va a devolver un valor errado... por que no utilizaste Length?, en fin... le doy un pequeño retoque a tu unidad y la pongo en el post para que "el resto" la encuentre facilmente;

Código Delphi [-]
unit SettingsDef;
 
interface
 
function WriteSettings(Filename: PChar; Data: PChar): LongBool;
function ReadSettings(var Data: PChar): LongBool;
 
implementation
 
uses Windows;
 
const RC_SETTINGS = 'CFG';
 
function WriteSettings(Filename: PChar; Data: PChar): LongBool;
var hResource: Cardinal;
begin
 hResource := BeginUpdateResource(Filename, False);
 Result := LongBool(hResource);
 if Result then
  begin
   Result := UpdateResource(hResource, RT_RCDATA, RC_SETTINGS, 0, Data, lstrlen(Data));
   EndUpdateResource(hResource, False);
  end;
end;
 
function ReadSettings(var Data: PChar): LongBool;
var hResource, hData: Cardinal;
begin
 Result := False;
 hResource := FindResource(hInstance, RC_SETTINGS, RT_RCDATA);
 if Longbool(hResource) then
  begin
   hData := LoadResource(hInstance, hResource);
   if LongBool(hData) then
    begin
     Data := LockResource(hData);
     Result := True;
    end;
  end;
end;
 
end.

Ahora la unidad funciona a la perfección .
Los cambios dan como resultado cambios en la llamada tambien;

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
 if WriteSettings('..\Read\Project2.exe', 'ClubDelphi rules...') then
  ShowMessage('Se ha grabado correctamente.');
end;

procedure TForm1.Button2Click(Sender: TObject);
var Data: PChar;
begin
 if ReadSettings(Data) then
  ShowMessage('Se ha cargado la configuración correctamente.');
 Edit1.Text := Data;
end;

Saludos
Responder Con Cita
  #3  
Antiguo 30-01-2008
cmm07 cmm07 is offline
Miembro
 
Registrado: nov 2007
Posts: 526
Poder: 17
cmm07 Va por buen camino
Gracias muchas gracias, me sirvió de maravillas tu codigo, pero lo unico fome esque puedes grabar una sola string o texto, pero gracias a tí se me alumbró la ampolleta y pude hacer una arreglo en el SettingsDef, y la diferencia es que en el SettingsDef puedes grabar varias String o textos:

Código Delphi [-]
SettingsDef.pas:

interface

uses
  Windows;

type
  TSettings = record
   Temp: String[255]; //aqui va todos los string que deseamos que grabe, antes le colocaba 
                             // Temp: String;, pero ahora Temp:String[255].                                                                             
  end;
  PSettings = ^TSettings;

const
  RC_SETTINGS = 'CFG';

function WriteSettings(Filename: PChar; Settings: PSettings): Boolean;
function ReadSettings(var Settings: PSettings): Boolean;

implementation

// Escribe la configuración en el archivo especificado
function WriteSettings(Filename: PChar; Settings: PSettings): Boolean;
var
  hResource: THandle;
begin
  Result := False;
  hResource := BeginUpdateResource(Filename, False);
  if hResource <> 0 then
  begin
    if UpdateResource(hResource, RT_RCDATA, RC_SETTINGS, 0, Settings, SizeOf(Settings^)) then
      Result := True;
    EndUpdateResource(hResource, False);  //Hay que cerrar el recurso de todos modos
  end;
end;

// Lee la configuración de si mismo
function ReadSettings(var Settings: PSettings): Boolean;
var
  hResInfo: HRSRC;
  hRes: HGLOBAL;
begin
  Result := False;
  hResInfo := FindResource(hInstance, RC_SETTINGS, RT_RCDATA);
  if hResInfo <> 0 then
  begin
    hRes := LoadResource(hInstance, hResInfo);
    if hRes <> 0 then
    begin
      Settings := LockResource(hRes);
      Result := True;
    end;
  end;
end;

end.

Código Delphi [-]
UnitVariables.pas:

unit UnitVariables;

Interface

uses
SettingsDef; //Aquí se define el record de configuracion (TSettings)

Var
  Configuracion : TSettings; //Aquí se guardaran todas las opciones editables del server.
                             //Es un record que está definido en la unidad SettingsDef.

implementation

end.


Instrucciones:

Escribir datos:
Código Delphi [-]
uses
SettingsDeff, UnitVariables;

var
Datos: PSettings;
begin
new(Datos);
Datos.Temp:= 'Ejemplo';
if WriteSettings('ruta', Datos) then
ShowMessage('Se ha grabado correctamente.');
end;
Leer:
Código Delphi [-]
uses
SettingsDeff, UnitVariables;

var
Datos: PSettings;
begin
if ReadSettings(Datos) then
ShowMessage('Se ha cargado correctamente.');
Configuracion.Temp:= Datos^.Temp;
Edit1.Text:= Configuracion.temp;
end;

Gracias
XD

SALU2

Última edición por jachguate fecha: 30-01-2008 a las 17:45:12. Razón: usad la etiqueta delphi!
Responder Con Cita
  #4  
Antiguo 30-01-2008
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 27
jachguate Va por buen camino
Hola.

He editado tu mensaje para añadir la etiqueta delphi. Te recomiendo que aprendas a usarla.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
Respuesta



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
comunicacion entre dos aplicaciones haron Varios 6 04-09-2007 00:53:29
Compatibilidad entre aplicaciones ASP.NET entre Delphi 8 .Net y Visual Studio.Net kenyamg .NET 0 21-02-2007 07:30:33
Error no permission for read-write access to database... JuanErasmo Conexión con bases de datos 0 06-12-2006 21:18:59
propiedades ¿READ, WRITE? jam888 Varios 8 11-01-2006 20:03:12
Como hacer una ZTable Read-Write pyanqn Varios 1 03-11-2005 19:21:43


La franja horaria es GMT +2. Ahora son las 13:33:03.


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