Non, EnumWindows c'est un exemple d'appel côté Application d'un CallBack EnumWindowsProc, ça serait bien de t'entrainer à utiliser un CallBack de windows tout prêt, une fois que tu maitrise le principe, tu pouvais passer à faire le tien
Côte DLL
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| type
TEventProc = procedure(AMsg: PChar); stdcall;
var
_EventProc: TEventProc;
procedure SetEvent(lpEventProc: TEventProc); stdcall; // exportable
begin
_EventProc := lpEventProc; // tu le stocke dans une var ou dans un objet, à toi de voir aussi le multi-thread ... GetCurrentThreadId peut aider à gérer un tableau de TEventProc différent pour chaque thread
end;
procedure DoEvent(const Chaine: string); // méthode interne de ta DLL
begin
if Assigned(_EventProc) then
_EventProc(PChar(Chaine));
end; |
Dans ton code de la DLL qui doit envoyer la chaine, tu appele DoEvent
Côté Appli
tu as fait des external ou LoadLibrary\GetProcAddress selon ce que tu préfères, je préfère le faire manuellement, cela rend ton appli moins dépendante de la DLL si la fonctionnalité n'est pas utilisé systématiquement
tu dois aussi déclarer fonction et type
En général, lorsque je développe une DLL, je fais aussi son header avec la déclaration des types et des fonctions (des wrapper qui me font LoadLibrary\GetProcAddress), cela évite de le refaire si la DLL est utilisé dans plusieurs applis
1 2 3 4 5 6 7 8 9
| type
TEventProc = procedure(AMsg: PChar); stdcall;
procedure SetEvent(lpEventProc: TEventProc); stdcall; external ...
procedure MaProc(AMsg: PChar); stdcall;
begin
ShowMessage(AMsg);
end; |
quelque part tu appele
SetEvent(MaProc); // ou @MaProc Delphi se débrouille avec les pointeurs de procédure ...
Partager