Bonjour,

Voilà, j'ai un exécutable P1 et un exécutable P2 chargeant une DLL.

Je souhaite indiquer à la DLL qu'elle doit se décharger. Pour ce faire, je crée un Mutex dans P1.

Régulièrement, le code de la DLL chargée par P2 vérifie l'existence du Mutex créé par P1. Si le Mutex existe, la DLL se décharge de P2.

Dans P1:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
vh_Mutex := CreateMutex(nil, True, MutexStopDll);
Dans la DLL de P2, à intervalle régulier:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
vh_Mutex := CreateMutex(nil, True, MutexStopDll);
    if vh_Mutex = 0 then Begin
      trace(gc_process + MutexStopDll, 'Mutex ' + MutexStopDll + ' pas créé => Running');
      gl_quit := True;
    End
    else begin
      trace(gc_process + MutexStopDll, 'Mutex ' + MutexStopDll + ' créé => PAS Running');
      CloseHandle(vh_Mutex);
    end;
Et bien ce code ne fonctionne pas. J'utilise les Mutex depuis 10 ans, et la nada. La seule particularité est que le code essayant qui tente la création du Mutex est dans une DLL, et qu'elle y parvient alors que P1 a déjà créé le Mutex. Je n'y comprends absolument rien.

Une idée ?