Bonjour,
je développe une dll qui a besoin d'être appelée par une fonction externe (dll SimConnect).
J'ai pris le choix de gérer les appels par messages du style WM_USER + xxx.
Mon problème est que la méthode de ma classe n'est jamais appelée. Je pense que ça viens du handle de ma dll ou du principe d'une dll qui bloquerai ce genre de chose... je suis
ci dessous le code de la dll et quelques explications. Pour info je charge la dll dynamiquement
Si quelqu'un arrive à m'expliquer pourquoi cela ne marche pas ce serait cool,
merci
Jacques
--------------------
J'ai créé la classe suivante:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
const
WM_USER_EFBCONNECT = WM_USER + 3;
type
TEfbConnect = class
procedure EfbConnectMessage(var Message: TMessage); message WM_USER_EFBCONNECT;
private
FpEventHandler: PEfbConnEventHandler;
public
end;
...
procedure TEfbConnect.EfbConnectMessage(var Message: TMessage);
begin
SimConnect_CallDispatch(hSimConnect, DispatchHandlerFSX, nil);
end; |
hSimConnect est un handle fourni par la SDK de FSX (FlightSimulator X)
DispatchHandlerFSX est une procédure de ma dll appelée par le dispacher du SDK FSX
Pour initialiser le processus d'appel, j'utilise la commande suivante:
Result := SimConnect_Open(hSimConnect, 'Request Data', HandleModule, WM_USER_EFBCONNECT, 0, 0);
hSimConnect est différent de 0 quand un handle est fourni,
HandleModule est le handle de ma dll (sinon de la form quand le code est placé dans un programme).
Le handleModule est initialisé avec la ligne suivante:
HandleModule := GetModuleHandle(AnsiString('efbconnect.dll'));
Si je compare la valeur de HandleModule et du handle retourné par
hEfbConnect := LoadLibrary(dllName);
j'ai la même chose.
Partager