PDA

Ver la Versión Completa : Llamar a una DLL ubicada en otro directorio


Javi2
30-06-2006, 10:30:16
Hola,

Acabo de crear por primera vez una DLL con un formulario. El caso es que quiero probarla llamándola desde otro proyecto de prueba ubicado en una carpeta distinta a donde esta la DLL, pero no me hace ni caso. Me muestra un mensaje diciendo que no encuentra la DLL. Si la copio en la misma carpeta donde está este proyecto de prueba sí funciona bien.
El problema es que cuando utilice realmente esta DLL, quiero ubicarla en una carpeta determinada que no tiene porqué coincidir con el ejecutable que la llama.

¿Cómo puedo llamar a una DLL ubicada en una carpeta distinta al ajecutable que la llama?

Muchas gracias por el interés.

seoane
30-06-2006, 11:05:09
¿Que codigo utilizas para llamarla? Hay mas de una forma de usar una DLL dependiendo de como la uses puedes indicarle una ruta absoluta, relativa o incluso buscarla tu mismo. Y en ultimo caso siempre puedes colocarla en la carpeta de windows.

Pon aqui el codigo que usas y le echamos un vistazo.

Javi2
30-06-2006, 12:37:53
Gracias a todos por vuestro interés. Aquí adjunto el código donde se llama a la DLL. Lo que hago es añadir la definición de la función pero con la coletilla "external" y el nombre de la DLL.



unit uMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

function BUSCAARTICULO_MostrarDLL: shortstring; stdcall; external 'PrPrueba3.dll';

var
Form1: TForm1;

implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
sCad: string;
begin
//llamada a la DLL
sCad := BUSCAARTICULO_MostrarDLL;
if sCad <> '' then ShowMessage( sCad );
end;
end.

seoane
30-06-2006, 16:56:46
Tienes varias opciones, escribir la ruta completa de la dll o añadir la carpeta donde esta la dll a la variable de entorno PATH para que asi windows sepa donde buscarla. La primera tiene el inconveniente de que tienes que saber de antemano la ruta completa donde estara ubicada la dll y en el segundo caso necesitas que el instalador agregue la carpeta al Path. Aunque siempre puedes copiar la libreria a la carpeta de windows, aunque creo que no es eso lo que buscas.

Tambien puedes cargar la libreria de forma dinamica, es decir, una vez iniciada la aplicacion. Aqui tienes un ejemplo (http://www.clubdelphi.com/foros/showpost.php?p=119562&postcount=4) de como hacerlo