Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > .NET
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-07-2015
Panasys Panasys is offline
Miembro
 
Registrado: ago 2007
Posts: 88
Poder: 17
Panasys Va por buen camino
Leer Buffer (Pasando de C# a Delphi)

Buenas gente, paso a contarles que estoy haciendo, mas adelante le puede servir a otro las soluciones que encuentre.

Estoy intentando implementar un sistema de control de barreras a traves de un SDK que trae la placa.

Ahora intento leer el log de eventos en tiempo real

Me dice el manual que en C# accedo asi

Código PHP:
c#:
int ret 0;
int buffersize 256;
byte[] buffer = new byte[256];
ret GetRTLog(href buffer[0], buffersize); 
Bien, yo lo intente implementar asi:

Código Delphi [-]
  public
    { Public declarations }
    param       : pchar;
    Conn        : Integer;
    Buffer      : array[0..256] of byte;
    BufferSize  : Integer;
    LeeBuffer   : Integer;
  end;

var
  Form1: TForm1;
function Connect(Paramchar):Integer; stdcall; external 'plcommpro.dll';
function GetRTLog(handle: THandle; Buffer: Byte; BufferSize : Integer):Integer; stdcall; external 'plcommpro.dll';

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
param := 'protocol=TCP,ipaddress=192.168.1.251,port=4370,timeout=4000,passwd=';
Conn := Connect(Param);
If Conn <> 0 then Showmessage('Conectado, Handle: '+IntToStr(Conn)) else  Showmessage('Fallo');
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
LeeBuffer   := 0;
BufferSize := 256;
LeeBuffer  := GetRTLog(Conn, Buffer[0], BufferSize); //GetRTLog Da 0 o mas una vez leido el buffer o negativo si hubo un error
Showmessage('Buffer: '+IntToStr(LeeBuffer));
end;

Me da un Access Violation de la DLL.

La conexion la hace ok, la dll funciona ok ya que accedo a otras funciones.

Seguro que leo mal el buffer o lo declaro mal para este caso, espero algun hilo amigos, gracias, abrazo.

Javier

Última edición por nlsgarcia fecha: 16-07-2015 a las 01:03:10. Razón: Sintaxis C
Responder Con Cita
  #2  
Antiguo 15-07-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Trata de definirlo así:
Código Delphi [-]
function GetRTLog(handle: THandle; Buffer: PByte; BufferSize : Integer):Integer; stdcall; external 'plcommpro.dll';
Y usarlo así:
Código Delphi [-]
GetRTLog(Conn, @Buffer[0], BufferSize);

Otra posibilidad:
Código Delphi [-]
function GetRTLog(handle: THandle; var Buffer: Byte; BufferSize : Integer):Integer; stdcall; external 'plcommpro.dll';
Y usarlo así:
Código Delphi [-]
GetRTLog(Conn, Buffer[0], BufferSize);


Saludos.
Responder Con Cita
  #3  
Antiguo 15-07-2015
Panasys Panasys is offline
Miembro
 
Registrado: ago 2007
Posts: 88
Poder: 17
Panasys Va por buen camino
escafandra muchas gracias, funciona y me dice en entero cuanto leido, pero no obtengo los datos que se supone deberia obtener.

Algo que no mencione es que en el manual dice:

Código:
[Function]
int GetRTLog(HANDLE handle,char *Buffer, int BufferSize)
Yo pase todo a byte por tratarlo como un buffer, pero la descripcion de la funcion es esa, si yo paso las variables a pchar no funciona.

Deberia tener datos cargados en el arreglo, pero veo datos que no me sirven, demasiados cortos o con faltantes, podrias orientarme con ese char que aparece en la funcion, ya que aparece con un asterico.

Gracias

Javier
Responder Con Cita
  #4  
Antiguo 16-07-2015
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
El asterisco indica que es un puntero. *char es un PCHAR.

Para pasar un buffer tipo array debes pasar un pontero al primer elemento: @buffer[0]


Saludos.
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
Leer buffer de teclado newtron Varios 2 06-11-2014 09:23:13
ERROR:ShLink.GetPath(Buffer, Sizeof(Buffer), Data, SLGP_UNCPRIORITY) Mav Varios 2 26-05-2008 21:31:49
Leer Word, Integer... de un Buffer de bytes vejerf Varios 1 18-04-2008 11:35:53
Leer buffer de teclado dieleo Varios 0 12-02-2007 19:23:19


La franja horaria es GMT +2. Ahora son las 09:50:04.


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