Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   problema llamando a una DLL (https://www.clubdelphi.com/foros/showthread.php?t=33315)

quinqui 03-07-2006 22:43:38

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!!

dec 03-07-2006 23:00:34

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;

quinqui 03-07-2006 23:06:16

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...

dec 03-07-2006 23:11:42

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.

quinqui 03-07-2006 23:19:37

Ohhh ahora no me mandó ese error :D 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


La franja horaria es GMT +2. Ahora son las 22:30:15.

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