Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Ayuda con visual basic y delphi (https://www.clubdelphi.com/foros/showthread.php?t=35479)

perrotekel 12-09-2006 11:42:10

Ayuda con visual basic y delphi
 
Necesito ayudo por favor, tengo acceder a una dll hecha en delphi y todo me va bien, pero creo que los tipo de datos no corresponden, asi que os pongo esta funcion aqui para ver si me podeis decir que tipos de datos de visual basic creeis que seran compatibles con los de la funcion.

procedure get_system_data(com_port,start_data:longint;system_data:PChar;
max_data:longint;
var rec_data,error_code:longint);stdcall;
external 'benzing_com.dll';

Por que yo no tengo ni idea.
Muchas gracias

marcoszorrilla 12-09-2006 13:05:58

Una pregunta.

Estás intentando leer relojes de colombófilos?

Un Saludo.

perrotekel 12-09-2006 15:06:02

Exacto
 
Es que mi tio tiene palomas y les he hecho un software por que el que tenian esta en ms-dos.


Podrias ayudarme, albertodelafuente@gmail.com

delphi.com.ar 12-09-2006 16:18:36

La declaración sería algo como:
Código:

Public Declare Sub get_system_data Lib "benzing_com.dll" (ByVal com_port As Long, ByVal start_data As Long, system_data As String)
PD: La intención del foro es que se responda en el foro, para que tu inquietud sea de utilidad para el resto. No por correo!!

perrotekel 12-09-2006 17:18:18

Es verdad, tienes razon
 
Siento haber puesto el email, el problema de que lo ponga es la desesperacion.

Yo he declarado asi la funcion y llega a la funcion y en ese momento me da un error de windows (de los de enviar informe).
yo creo que es por lo de las variables, que no use los mismos tipos.

roman 12-09-2006 17:23:45

En la declaración de Federico, ¿no faltan argumentos?

// Saludos

perrotekel 12-09-2006 17:27:20

Si
 
Pero imagino que sera
Public Declare Sub get_system_data Lib "benzing_com.dll" (ByVal com_port As Long, ByVal start_data As Long, system_data As String,ByVal max_data as Long, rec_data as string,ByVal error_code as long)

No federico, ya que var rec_data , var es un string en delphi ¿No?.

delphi.com.ar 12-09-2006 20:03:44

Cita:

Empezado por roman
En la declaración de Federico, ¿no faltan argumentos?

Ups!... que raro... si lo que hice fue un copy-paste y cambié los tipos y separadores...

Código:

Public Declare Sub get_system_data Lib "benzing_com.dll" (ByVal com_port As Long, ByVal start_data As Long, ByVal system_data As String, ByVal max_data as Long, ByRef rec_data as Long, ByRef error_code as Long)
Saludos!

perrotekel 12-09-2006 20:27:56

Gracias
 
Gracias por echarme una mano, pero una ultima cosa, por que unas veces Byval y otras ByRef?

Y otra cosa, haber si sabes por que puede ser, que cuando llamo al metodo en visual basic me obliga a poner un =, cuando el metodo no devuelve nada, lo que devuelve lo guarda en los valores que se le pasan

roman 12-09-2006 20:55:20

Cita:

Empezado por perrotekel
por que unas veces Byval y otras ByRef?

Pues supongo que corresponde a los parámetros pasados por valor o por referencia. Cuando un parámetro se pasa por valor, la subrutina recibe una copia de la variable, de manera que cualquier modificación que hagas, no se verá reflejada al término de la rutina. En cambio, los parámetros pasados por referencias, podríamos decir que se pasa la variable en sí y no sólo la copia, de manera que los cambios que se hagan si se reflejan en las variables pasadas.

En Delphi, todos los parámetros se pasan por valor a menos que se especifique lo contrario anteponiendo la palabra reservada var. Los ByRef que puso Federico corresponden a los var en la declaración en pascal.

Lo que desconozco es si VB tiene algún default al respecto o siempre hay que especificar ByVal y ByRef.

// Saludos

marcoszorrilla 12-09-2006 21:13:38

Para más facilidad:
Código Delphi [-]
// GET SYSTEMDATA
// com_port: [1..6]
// start_data: start Char for reading (typical:0)
// system_data: pointer with the adress of the Buffer to write the system data
// max_data: max number of the data which could be written in the Buffer
//           (use to protect against buffer (array) overwriting)
// rec_data: number of recived datas from the device
// NOTE: if max_data < rec_data datas got lost

// error_code: 0x00 .. no error
//             0x95 .. no port avaiable
//             0x97 .. no answer
//             0x99 .. timeout (no polling found)
procedure get_system_data(com_port,start_data:longint;system_data:PChar;
                          max_data:longint;
                          var rec_data,error_code:longint);stdcall;
external 'benzing_com.dll';
//------------------------------------------------------------------------------

// SET SYSTEM DATA
// With this command the atis TOP gets new system data from the PC.
// Only the following parts of system data will be changed:
// fancier's name 25 bytes  "Fancier One"
// club nr.       5 bytes   "12345"
// unused         6 bytes   "123456"
// fancier's nr.  6 bytes   "123456"

// The unused data just has a significance in Germany.
// In other countries those data are not necessary. Nevertheless memory is
// reserved for these data. By this way those data can be used in the future.

// Special of the club nr. data in Germany:
// club organization number   3 bytes   "123"
// travel organization number 2 bytes   "12"

// com_port: [1..6]
// system_data: pointer with the adress of the Buffer to read the system data
// len_data: number of datas to send

// error_code: 0x00 .. no error
//             0x20 .. general communication error
//             0x95 .. no port avaiable
//             0x97 .. no answer
//             0x99 .. timeout (no polling found)
procedure set_system_data(com_port:longint;system_data:PChar;len_data:longint;
                           var error_code:longint);stdcall;
external 'benzing_com.dll';

Un Saludo.

delphi.com.ar 12-09-2006 21:25:05

Cita:

Empezado por perrotekel
Gracias por echarme una mano, pero una ultima cosa, por que unas veces Byval y otras ByRef?

Porque unos parámetros son por valor y otros por referencia. El código en Delphi tienes definido un parámetro del tipo var (variable parameters) estas utilizando un parámetro por referencia, similar al ByRef de VisualBasic.

Cita:

Empezado por perrotekel
Y otra cosa, haber si sabes por que puede ser, que cuando llamo al metodo en visual basic me obliga a poner un =, cuando el metodo no devuelve nada, lo que devuelve lo guarda en los valores que se le pasan

Si al procedimiento lo llamas encerrando sus parámetros entre paréntesis, tienes que utilizar la instrucción call heredada de QBasic, si no utilizas los paréntesis, puedes prescindir del call

Saludos!


La franja horaria es GMT +2. Ahora son las 13:05:36.

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