Registriert seit: 16. Jan 2005
448 Beiträge
|
Wie lade ich eine DLL zur Laufzeit.
21. Sep 2024, 10:53
Liebe Freunde,
ich habe hier:
Delphi-Quellcode:
procedure TForm1.FormCreateHOOK;
begin
// Laden der DLL
//DLLHandle := LoadLibrary(Extractfilepath(Application.exename)+'MouseHookDLL.dll');
DLLHandle := winapi.windows.LoadLibrary(' DLLMouseHook.dll');
if DLLHandle <> 0 then
begin
// Setzen des globalen Hooks mit der in der DLL definierten Prozedur
@MouseHookProc := GetProcAddress(DLLHandle, ' MouseHookProc');
if Assigned(@MouseHookProc) then
begin
MouseHook := SetWindowsHookEx(WH_MOUSE_LL, @MouseHookProc, DLLHandle, 0);
if MouseHook = 0 then
ShowMessage(' Failed to set hook: ' + SysErrorMessage(GetLastError));
end;
end;
end;
mit den USES im Programm:
Delphi-Quellcode:
unit MainUnit1;
interface
uses
Winapi.windows, Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
DateUtils, Grids,
SHDocVw, MSHTML, ActiveX,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls, WebView,
Vcl.OleCtrls;
Meine DLL ist im Selben Verzeichnis wie meine EXE (32bit)
und sieht so aus:
Delphi-Quellcode:
library DLLMouseHOOK;
{ Wichtiger Hinweis zur DLL-Speicherverwaltung: ShareMem muss die erste
Unit in der USES-Klausel Ihrer Bibliothek UND in der USES-Klausel Ihres Projekts
(wählen Sie 'Projekt-Quelltext anzeigen') sein, wenn Ihre DLL Prozeduren oder Funktionen
exportiert, die Strings als Parameter oder Funktionsergebnisse übergeben. Dies
gilt für alle Strings, die an oder von Ihrer DLL übergeben werden, auch für solche,
die in Records und Klassen verschachtelt sind. ShareMem ist die Interface-Unit zur
gemeinsamen BORLNDMM.DLL-Speicherverwaltung, die zusammen mit Ihrer DLL
weitergegeben werden muss. Übergeben Sie String-Informationen mit PChar- oder ShortString-Parametern, um die Verwendung von BORLNDMM.DLL zu vermeiden.
}
uses
Windows,
Messages,
SysUtils,
Classes;
{$R *.res}
var
MouseHook: HHOOK;
function MouseHookProc(nCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
if nCode = HC_ACTION then
begin
// Hier können Sie die Mausereignisse verarbeiten
// Beispiel: Wenn die linke Maustaste gedrückt wird
if wParam = WM_LBUTTONDOWN then
begin
// Mauskoordinaten oder andere Aktionen hier verarbeiten
MessageBox(0, ' Linke Maustaste gedrückt', ' Maus-Hook', MB_OK);
end;
end;
Result := CallNextHookEx(MouseHook, nCode, wParam, lParam);
end;
exports
MouseHookProc;
begin
end.
Doch Delphi 10.1 Compiliert nicht und bekommen den Error) "[dcc32 Fehler] MainUnit1.pas(158): E2036 Variable erforderlich",
bei der Zeile
Delphi-Quellcode:
// Setzen des globalen Hooks mit der in der DLL definierten Prozedur
@MouseHookProc := GetProcAddress(DLLHandle, ' MouseHookProc');
Ich weiß nicht wieso?
Danke für Jeden TIPP:
Geändert von wschrabi (21. Sep 2024 um 10:57 Uhr)
|