Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 18-04-2005
mar646 mar646 is offline
Miembro
 
Registrado: dic 2004
Posts: 46
Poder: 0
mar646 Va por buen camino
Problemas con dll y estructuras

Hola. Os explico mi problema a ver si alguien me pueda dar alguna idea.

Tengo una aplicación que debe hacer uso de una dll escrita en C++. Yo uso delphi 5. El caso es que esta dll utiliza una serie de estructuras de las cuales tengo un archivo de cabecera de la dll escrito en C++. Mi idea era pasar este archivo cabecera a delphi para poder usar las funciones y estructuras que contiene. Todo me iba genial hasta que he llegado a una función que toma como parámetro de entrada una estructura en la que uno de sus campos es otra estructura; hasta aquí nada raro. El problema es que esta estructura se llama 'Set' (palabra reservada en delphi) y no me deja ponerle este nombre.

He tratado de ponerle otro nombre pero al llamar a la función me da un error (un número que no me indica nada en concreto).

¿Qué puedo hacer? ¿Esto quiere decir que esta dll es imposible de usar en delphi? ¿Una solución podría ser el programar el objeto en C++ e importarlo cmo active x en delphi? (esto sería un auténtico coñazo, espero que sea la última solución)

¿Se puede usar directamente la dll sin tener que hacer un archivo cabecera?
Responder Con Cita
  #2  
Antiguo 17-11-2007
JHA JHA is offline
Registrado
 
Registrado: nov 2007
Ubicación: Montevideo, Uruguay
Posts: 3
Poder: 0
JHA Va por buen camino
Smile stdcall o cdecl

estás seguro que el problema no está en que no especificaste stdcall o cdecl después de declarar la función. Usualmente los dll escritos en c son cdecl por defecto aunque el programador no lo haya especificado. Cuando se programa un dll en el lenguaje que sea se suele especificar stdcall. Tanto en stdcall como en cdecl el orden en que se pasan los parámetros es inverso que en Delphi. La diferencia entre sdtcall y cdecl está en que en el segundo el caller libera los recursos reservados mientras que en el segundo es la función. Lo más probable es que en un dll sean todas las funciones stdcall pero si lo hizo un programador aficionado como yo, quizá no se tomó la molestia de escribir stdcall antes de cada función. En cuanto a los miembros de las estructuras, no debería importar el nombre sino el tipo de dato. Cuando uses un miembro que es un pointer declaralo antes como PType = ^Type pero cuando sea el parámetro de una función como var VarName: Type. En cambió el nombre de las funciones sí deben coincidir con el nombre en el dll, excepto en el caso de que uses un alias pero debes especificar el nombre correcto al final.

ej: DoSomething(var b: Byte; Size: Integer); stdcall; external 'MyLib.dll';
No incluyo un ejemplo con alias porque no estoy en mi computadora sino en un cyber y no tengo la ayuda de delphi a mano, como nunca uso alias no me acuerdo si va ; antes del nombre verdadedo de la función ni me acuedo si el nombre verdadero va entre dos '.
Responder Con Cita
  #3  
Antiguo 17-11-2007
JHA JHA is offline
Registrado
 
Registrado: nov 2007
Ubicación: Montevideo, Uruguay
Posts: 3
Poder: 0
JHA Va por buen camino
Ogg Vorbis y delphi

Usualmente hago dll con Dev-cpp y los uso en Delphi y viceversa. Pero cuando compilé Libogg con Dev-cpp importando un projecto de MS Visual C++ que viene en la carpeta win32 del paquete de distribución de libogg y vorbis no conseguí más que violaciones de acceso con Delphi. Lo posteo aquí porque creo que esto está relacionado con el problema del compañero, ¿alguien que pueda constestar ambas preguntas con una misma respuesta? Apropósito, compañero, ¿trataste de usar GetProcAddress del SDK de Windows en lugar de declarar las funciones con external? A mi me funciona pero no con libogg. Post Data: $L no funciona si la librería es '.a' y no ganas nada con cambiarle la extensión a '.obj' porque el linker te sale con que el formato es incorrecto. Creo que esto último sí amerita una nueva discusión.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 22:49:58.


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