Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-10-2019
Diego E. Diego E. is offline
Miembro
 
Registrado: mar 2018
Posts: 30
Poder: 0
Diego E. Va por buen camino
Asignar valores al contenido de un record y mandar como puntero

Hola, estoy conociendo los punteros y ciertamente no los termino de entender del todo, ya he leido varios artículos y me han ayudado a realizar cierta cantidad de código, sin embargo me topé con un obstáculo que no logro superar, espero puedan ayudarme.

El asunto es el siguiente, tengo la estructura:

Código Delphi [-]
TSSP_COMMAND = record
  Key: TSSP_FULL_KEY;
  BaudRate: LongInt;
  Timeout: LongInt;
  PortNumber: Byte;
  SSPAddress: Byte;
  RetryLevel: Byte;
  EncryptionStatus: Byte;
  CommandDataLength: Byte;
  CommandData: Array[0..255-1] of Byte;
  ResponseStatus: Byte;
  ResponseDataLength: Byte;
  ResponseData: Array[0..255-1] of Byte;
  IgnoreError: Byte;
end {SSP_COMMAND};

Misma que debo llenar sólo con los siguientes datos(por ahora):
Código Delphi [-]
command.BaudRate := 9600;
    command.Timeout := 1000;
    command.RetryLevel := 3;
    command.IgnoreError := 1;
    command.PortNumber := 20;
    command.SSPAddress := 0;

Una vez que se tienen dichos datos debo mandar dicha estructura como un puntero a una función que traje de una DLL:
Código Delphi [-]
TOpenPort = function (cmd: TSSP_COMMAND): Integer; stdcall; //Encabezado de la función de la DLL
ClosePort: TClosePort;
if OpenPort(command) = 0 then ShowMessage('No se pudo abrir el puerto'); //Esta es la linea del error

Lo que intento replicar en la linea del error es lo siguiente:
Código:
typedef struct{
	SSP_FULL_KEY Key;
	unsigned long BaudRate;
	unsigned long Timeout;
	unsigned char PortNumber;
	unsigned char SSPAddress;
	unsigned char RetryLevel;
	unsigned char EncryptionStatus;
	unsigned char CommandDataLength;
	unsigned char CommandData[255];
	unsigned char ResponseStatus;
	unsigned char ResponseDataLength;
	unsigned char ResponseData[255];
	unsigned char IgnoreError;
}SSP_COMMAND;

SSP_COMMAND* cmd;

if (OpenPort(cmd) == 0)
	{
		THREAD_UNLOCK
        return false;
	}
Intenté copiar el record sin éxito:
Código Delphi [-]
CopyMemory(@cmd, @command, sizeof(TSSP_COMMAND));

El punto de todo esto es que no funciona el OpenPort y yo supongo que es:
1.- No se está copiando bien el contenido de command a cmd(cmd es ^TSSP_COMMAND, por lo que tengo entendido que no se pueden leer ni modificar los datos más que copiando directamente de otro record)
2.- Da error por que no estoy mandando el puntero a la funcion OpenPort pero cuando se la intento poner en el encabezado me da error

Para no hacerlo más largo de lo que ya lo hice anexo todo lo necesario para poder probar el error(Hasta donde se pueda llegar sin el hardware del puerto). https://we.tl/t-Mk9IHv9I67

En conclusión, necesito tener algo parecido a ésto:
Código Delphi [-]
TOpenPort = function (cmd: ^TSSP_COMMAND): Integer; stdcall;

Y mandarle a OpenPort el puntero con las variables que les comenté asignadas en tiempo de ejecución, algo así o un equivalente:
Código Delphi [-]
cmd^.BaudRate := 9600;
    cmd^.Timeout := 1000;
    cmd^.RetryLevel := 3;
    cmd^.IgnoreError := 1;
    cmd^.PortNumber := 20;
    cmd^.SSPAddress := 0;
OpenPort(cmd^)
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
Asignar a nil despues de liberar puntero BDWONG Varios 3 28-10-2014 05:05:47
¿Se puede asignar una cadena de texto a un record? Casimiro Notevi Varios 7 04-01-2012 18:27:21
Problema con asignar valor nil a un puntero kdemia Varios 11 24-11-2011 03:30:05
Puntero a Estructura (Record) jlrbotella OOP 2 05-03-2007 12:39:51
Cómo asignar valores a una variable tipo Array quinqui OOP 7 23-06-2006 15:59:17


La franja horaria es GMT +2. Ahora son las 15:47:20.


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