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 03-07-2006
Avatar de quinqui
quinqui quinqui is offline
Miembro
 
Registrado: jun 2006
Posts: 14
Poder: 0
quinqui Va por buen camino
Question problema llamando a una DLL

holas chicos

les cuento que he creado una DLL usando Delphi, la que asumo está correctamente hecha (es la primera que hago, sólo consta de un módulo con 2 funciones hasta la fecha).

el problema me sale cuando trato de llamarla desde la aplicación que estoy haciendo.
he leído en la ayuda que la forma (estática) de implementarla es llamando a sus funciones una por una, cada cual asociada a la ruta de la DLL, de la siguiente manera :

Código Delphi [-]
  function MiFuncion(Variable: String): Integer; external 'MiLibreria.dll';
  procedure MiProced(Variable: String): String; external 'MiLibreria.dll';

mi pregunta es dónde escribo esto. lo he hecho en la parte de declaraciones Publicas, pero está mal; lo he intentado después de implementation, y es peor... ¿o se debe hacer en cada módulo o formulario que lo necesite? yo pensaba que no, pues en la ayuda se cita como ejemplo llamar la librería incluso al principio de la aplicación, como para que las funciones estén disponibles desde el principio... ¿o será que la DLL es la que está mal desde el principio??? ay, no sé...

ojalá alguien me pueda ayudar

muchas gracias de antemano!!
Responder Con Cita
  #2  
Antiguo 03-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Puedes incluir los prototipos de las funciones de la DLL dentro de la "interface" de la unidad en donde quieras utilizarlas. O, de otro modo, puedes incluirlas dentro de la "interface" de una determinada unidad creada a tal efecto. Luego podrías incluir dicha unidad en otras en donde quisieras hacer uso de las funciones en cuestión.

Por ejemplo, mira cómo añadirlas en una determinada unidad:

Código Delphi [-]
unit UMisFunciones;

interface

  {
    Declaraciones públicas de esta unidad
  }
  function MiFuncion(Variable: String): Integer; external 'MiLibreria.dll';
  procedure MiProced(Variable: String): String; external 'MiLibreria.dll';

implementation

end.

Luego podrías incluir la unidad "UMisFunciones" allí donde quisieras hacer uso de ella.

La siguiente es una unidad "real" que contiene una función que se encuentra en determinada DLL:

Código Delphi [-]
unit XpTheme;

interface

uses
  Windows;

  function IsThemeActive : BOOL; external 'uxtheme.dll' name 'IsThemeActive';

implementation

end.

En cualquier otra unidad podría hacer uso de la función "IsThemeActive" con solo añadir la unidad que la contiene:

Código Delphi [-]
uses
  XpTheme;

procedure TForm1.Button1Click(Sender: TObject);
begin
  if IsThemeActive then
    ShowMessage('El tema de Windows XP está activo')
  else
    ShowMessage('No hay ningún tema de Windows XP activo');
end;
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 03-07-2006 a las 23:06:55.
Responder Con Cita
  #3  
Antiguo 03-07-2006
Avatar de quinqui
quinqui quinqui is offline
Miembro
 
Registrado: jun 2006
Posts: 14
Poder: 0
quinqui Va por buen camino
muchas gracias, dec
lo acabo de probar, pero no me resulta pues el tipo de datos que devuelve una de mis funciones es TStrings y como el interface está antes de las clases, no me la reconoce! Buuaaaa T_____T snif...
Responder Con Cita
  #4  
Antiguo 03-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Me adelanté editando mi mensaje, pero, fíjate en el mismo cómo es posible añadir antes de los prototipos de las funciones aquellas unidades que se precisen. En tu caso por lo menos la unidad "Classes", en donde se encuentra "TStrings".

Es decir, por ejemplo:

Código Delphi [-]
unit XpTheme;

interface

uses
  Windows; // Añadimos las unidades que nos sean menester

  function IsThemeActive : BOOL; external 'uxtheme.dll' name 'IsThemeActive';

implementation

end.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 03-07-2006
Avatar de quinqui
quinqui quinqui is offline
Miembro
 
Registrado: jun 2006
Posts: 14
Poder: 0
quinqui Va por buen camino
Ohhh ahora no me mandó ese error o sea, no se me cae al compilar, pero... sí me mandó un error fatal al ejecutar la aplicación T____T
"La aplicación no se ha podido inicializar correctamente (0xc000007b). Haga clic en Aceptar para terminar la aplicación"!!! O___O
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
Llamando por Telefono ASAPLTDA OOP 0 22-01-2005 00:26:50


La franja horaria es GMT +2. Ahora son las 17:25:31.


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