FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
uso de función de dll cuyo parametro es un puntero (dirección) a una estructura
Hola amigos del club.Tengo un problema y estoy bastante tiempo intentando solucionarlo, pero no se como hacerlo. Estoy intentando desde Delphi utilizar una función de una dll. Esta dll fue creada utilizando visual c++. Dicha función recibe como parámetro un puntero (o una dirección) a una estructura.
Las defincion de la estructura en C son: Código:
typedef enum tipoEnumMes { enmEnero, enmFebrero, }enumMes; //esto es un tipo enumerado. En Delphi sería: enumMes = (enmEnero, enmFebrero); typedef enum tipoEnumDia { enmLunes, enmMartes, }enumDia; //esto es un tipo enumerado. En Delphi sería: enumDia = (enmLunes, enmMartes); typedef struct configuracion { enumMes Mes; enumDia Dia; char *FilePath; //puntero a cadena int LifeTime; int DeleteTime; char *LibPath; //puntero a cadena } TipoConfiguracion; Código:
int iniciaCliente(TipoConfiguracion *paramStConf); Ahora en Delphi hago lo siguiente:
No tengo ningún problema al cargar la librería, el problema se presenta cuando quiero usar la función Ejm:
El error es el siguiente: Access violation at Address XXXXX in module MSVCRT.DLL. Read of addres XXXXX. No se en que ando mal, si alguien detecta que estoy mal en algo por favor hágamelo saber. Necesito de vuestra ayuda. Gracias de antemano. Última edición por dec fecha: 11-10-2007 a las 19:17:10. |
#2
|
|||
|
|||
Amigos, por suerte encontré la solución. Desde el punto de vista lógico todo estaba bien, el problema es que yo compilaba mi proyecto con una alineación a 8 bytes, cuando he debido compilar el proyecto con una alineación a un byte.
Es decir la dll necesitaba leer la estructura byte por byte y además era necesario enviar la estructura exactamente tal como es, sin embargo mi proyecto enviaba una estructura cuyo tamaño es multiple de ocho ya que la estructura era enviada en bloques de ocho bytes. Por ejemplo si la estructura pesaba 29 bytes, mi aplicaión enviaba 32 bytes (multiplo de ocho). Saludos. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
pasar un puntero a una funcion | baby | Varios | 2 | 21-05-2007 13:10:22 |
Puntero a Estructura (Record) | jlrbotella | OOP | 2 | 05-03-2007 12:39:51 |
Almacenar la dirección de un puntero en una cadena | abracadabra | Varios | 2 | 17-11-2006 19:16:18 |
Direccion de memoria de una funcion | camambrini | Varios | 0 | 30-07-2004 18:20:05 |
Direccion de memoria de una funcion cuyo nombre esta en una variable | Rudorf | Debates | 13 | 31-07-2003 16:31:10 |
|