PDA

Ver la Versión Completa : Cargar una dll en mi aplicación


Boris
20-06-2006, 14:56:39
Perdón, alguien me podría enseñar como puedo cargar una dll sin tener que introducirla en el directorio del sistema.

dec
20-06-2006, 15:17:23
Hola,

Por ejemplo...


library libreria;

uses
Dialogs;

{$R *.res}

function HelpMe() : boolean; stdcall;
begin
ShowMessage('¡Espera que voy!');
Result := true;
end;

exports HelpMe;

end.



unit UfrmPrincipal;

interface

uses
Forms, Classes,
Controls, StdCtrls;

type
TfrmPrincipal = class(TForm)
btnHelpMe: TButton;
procedure btnHelpMeClick(Sender: TObject);
end;

var
frmPrincipal: TfrmPrincipal;

function HelpMe : boolean; external 'libreria.dll';

implementation

{$R *.dfm}

procedure TfrmPrincipal.btnHelpMeClick(Sender: TObject);
begin
HelpMe;
end;

end.


Y, bueno, generalizando... cargar una DLL... con la función "LoadLibrary", por ejemplo, puedes escoger la ruta de la librería a cargar...

seoane
20-06-2006, 15:40:37
Solo añadir a la explicacion de dec que si no especificas la ruta completa, se buscara en lo siguientes directorios y por ese orden:

1. El directorio desde el que se cargo la aplicacion
2. El directorio actual
3. El directorio System
4. El directorio Windows
6. Los directorios del Path

Lo mas sencillo es dejarla en el mismo directorio que tu aplicacion y no especificar la ruta completa. Sera el primer sitio donde buscara.

Boris
21-06-2006, 22:32:22
Gracias por responder, es una excelente solución, alguien me sugirió incrustarla en la aplicación y con eso se pudo arreglar.

Por otro lado también me he atascado buscando la forma de ¿Como saber cuando una memoria usb es conectada o desconectada de la máquina?. Si algúno podría sujerirme algúna forma de hacerlo, quiero hacer un servicio que me diga cuándo se conecta y se desconecta una memoria USB.

Gracias.

seoane
22-06-2006, 00:34:57
Para detectar cuando se conecta o desconecta una memoria usb quiza te pueda servir este hilo con un titulo tan sugerente ;)

Ejecutar un programa al conectar un USB (http://www.clubdelphi.com/foros/showthread.php?t=20146)

o este otro

Detección de una unidad removible (http://www.clubdelphi.com/foros/showthread.php?t=31486)

Aunque te serviria cualquier otro sistema que detectatara la insercion de un CD, es lo mismo con pequeños cambios. En el hilo anterior se habla en concreto del componenete de roman TCdChange (http://romansg.net/index.php?pg=cdchange) que puedes encontrar aqui (http://romansg.net/index.php?pg=cdchange). Que esta basado en un ejmplo de microsoft que puedes encontrar aqui (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/devio/base/detecting_media_insertion_or_removal.asp).

Por otro lado si lo que quieres es una lista de las memorias USB puedes usar el Truco 51 (http://www.clubdelphi.com/trucos/index.php?id=51) que lista los numeros de serie de todas las memorias USB conectadas. Aunque no te dice su letra, si quieres una lista con las letras de cada memoria usb, puedes usar esto otro:


var
Letra: Char;
begin
for Letra:= 'A' to 'Z' do
if GetDriveType(Pchar(Letra+':\')) = DRIVE_REMOVABLE then
begin
// Aqui usamos la letra para lo que queramos
ShowMessage('Esto es un USB '+Letra+':\');
end;
end;


Espero que con esto tengas paar empezar ....