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 20-07-2006
coletaun coletaun is offline
Miembro
 
Registrado: oct 2004
Posts: 43
Poder: 0
coletaun Va por buen camino
puntero *pantalla en c++

tengo una funcion de c++ que captura una determinada pantalla de un terminal a traves de un dll externa a la cual la llamo sin problemas y el resto de funciones de la libreria las ejecuta sin problema.
El problema empieza cuando intento capturar en esta tipo de variable los caracteres que aparecen en la pantalla del termina, que es otra aplicacion distinta a la de delphi.

La funcion en c se define asi en la dll:

BOOL WINAPI captura_pantalla(HCLIENT hclient, char *pantalla, int *longitud, int tout);
donde hclient es un manejador, char *pantalla es el buffer donde se van a copiar los datos de la pantalla, *longitud la longitud de los datos a copiar y tiout el tiempo de espera de la respuesta.

esta funcion da un true o false si se ejecuta, pero yo la defino en delphi:

function captura_pantalla(HCLIENT: integer; pantalla: string; longitud: integer; tout: integer ):bool; ¿seria esto correcto?

En principio no me funciona, da false y no captura los datos de la pantalla del terminal y el string está vacio.

¿tal vez *buffer, es un puntero de memoria y lo debo de recorrer?, no se como implementar la funcion de c++ y no se is será correcta la variable buffer como string o deberia de emplear otro tipo de variable. Llevo dos semanas trabado en esto y agradeceria mucho cualquier ayuda o comentario, de verdad, muchas gracias,
Responder Con Cita
  #2  
Antiguo 20-07-2006
Avatar de OSKR
OSKR OSKR is offline
Miembro
 
Registrado: nov 2004
Ubicación: San Cristóbal/Táchira/Venezuela
Posts: 389
Poder: 20
OSKR Va por buen camino
Hay algo q no tengo claro........en C si te funciona?, otra cosa...no recuerdo muy bien Pascal.....pero tal vez no deberías usar un string sino un puntero genérico o un puntero a un arreglo de Char. Otra cosilla.... el espacio al q apunta pantalla puede ser estático? o lo q sería eqivalente..... reservado por la misma función q la llama? o la función n la dll se encarga de reservarlo...? si fuese esta última tal vez sería mejor un doble puntero o declararlo:
Código:
char *&puntero
para q se pueda modificar el puntero en la función sin hacerlo como doble puntero...valga la redundancia .
__________________
Los Estados Unidos parecen destinados por la Providencia para plagar la América de miserias a nombre de la libertad."
Simón Bolívar
(Carta al Coronel Inglés Patricio Cambell 05/08/1829).
Responder Con Cita
  #3  
Antiguo 20-07-2006
coletaun coletaun is offline
Miembro
 
Registrado: oct 2004
Posts: 43
Poder: 0
coletaun Va por buen camino
Si en C si que funciona, pero estoy rehaciendo todo el programa en delphi para ampliarlo, pues es que estaba en C++ esta cerrado.
Intento utilizar las librerias definidas en c, para pascal.

Creo que deberia utilizar un puntero generico Pchar, pero ah hacerlo en la funcion me da un error en la dll.
El espacio al que apunta la pantalla es estático.
Responder Con Cita
  #4  
Antiguo 20-07-2006
Avatar de ppb
[ppb] ppb is offline
Miembro Premium
 
Registrado: jun 2005
Ubicación: España
Posts: 109
Poder: 19
ppb Va por buen camino
Cita:
Empezado por coletaun
La funcion en c se define asi en la dll:

BOOL WINAPI captura_pantalla(HCLIENT hclient, char *pantalla, int *longitud, int tout);
donde hclient es un manejador, char *pantalla es el buffer donde se van a copiar los datos de la pantalla, *longitud la longitud de los datos a copiar y tiout el tiempo de espera de la respuesta.

esta funcion da un true o false si se ejecuta, pero yo la defino en delphi:

function captura_pantalla(HCLIENT: integer; pantalla: string; longitud: integer; tout: integer ):bool; ¿seria esto correcto?
,
1. En pascal el tipo "string" no es una cadena de char terminado en null, por lo tanto debes usar un puntero ( Pchar ).
2. Al ser el parámetro "int *longitud" un puntero , lo tienes que pasar como
puntero "Var longitud: integer".
3. Debes definir la funcion estilo C/C++ "stdcall". Buscalo en la Help de Delphi.
__________________
Because , I have a power.
Responder Con Cita
  #5  
Antiguo 20-07-2006
coletaun coletaun is offline
Miembro
 
Registrado: oct 2004
Posts: 43
Poder: 0
coletaun Va por buen camino
var puntero?

Cierto:

Pongo la llamada "stdcall" y hago la llamada a la dell externa, ya que otras funciones contenidas enla libreria van perfectamente, es esta la que no da rsultado.
Si utilizo la variable tipo Pchar asi:

function captura_pantalla(HCLIENT: integer; pantalla: Pchar; longitud: integer; tout: integer ):bool;

da un error acces violation "libreria.dll"....etc.

¿como defino la variable var longitud: integer? , pensaba que estaba bien, o como le digo que es un puntero?

Muchas gracias.
Responder Con Cita
  #6  
Antiguo 20-07-2006
Avatar de ppb
[ppb] ppb is offline
Miembro Premium
 
Registrado: jun 2005
Ubicación: España
Posts: 109
Poder: 19
ppb Va por buen camino
Se define tal cual "Var longitud:integer"

Código:
function captura_pantalla(HCLIENT: integer; pantalla: Pchar; Var longitud: integer; tout: integer ):bool;
__________________
Because , I have a power.
Responder Con Cita
  #7  
Antiguo 20-07-2006
coletaun coletaun is offline
Miembro
 
Registrado: oct 2004
Posts: 43
Poder: 0
coletaun Va por buen camino
ok

Os listo lo de la variable longitud.
PEro al definir enla funcion pantalla como pchar, me da el error éste de (acces violation en la dll...)
Que otro tipo de variable podria poner??

Es decir ahora pongo pantalla: Pchar; y me da el error, ¿algo como var pantalla: char? para indicarle que es un puntero???

Muchas gracias
Responder Con Cita
  #8  
Antiguo 20-07-2006
Avatar de ppb
[ppb] ppb is offline
Miembro Premium
 
Registrado: jun 2005
Ubicación: España
Posts: 109
Poder: 19
ppb Va por buen camino
¿ Como defines el buffer ? Es decir a donde apunta el puntero "pantalla"
__________________
Because , I have a power.
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
Puntero de diferentes clases chavetaz OOP 10 19-11-2007 15:55:04
Cambiar puntero raton Esti Varios 2 23-11-2005 11:42:22
Puntero del raton Canastera Gráficos 2 24-06-2005 18:23:07
puntero a imagen Abaddon Gráficos 9 16-06-2005 00:17:29
Puntero a Stream Enan0 Varios 3 22-03-2005 22:08:13


La franja horaria es GMT +2. Ahora son las 06:51:41.


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