Bonjour à tous.
Etant toujours resté assez hermétique à la gestion des pointeurs, je voudrais savoir si ma façon de libérer le buffer MsgBuf est correcte.
Voici mon code:
La fonction LauchApp est un simple ShellExecute dont je récupère le résultat dans lRet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 procedure TFormMain.ActionExecute(Sender: TObject); var lRet: HINST; MsgBuf: PAnsiChar; begin // le Hint de l'action contient le nom de l'exe lRet := LaunchApp(TAction(Sender).Hint); if lRet <= 32 then // Erreur begin FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER or FORMAT_MESSAGE_FROM_SYSTEM, nil, GetLastError(), 0, @MsgBuf, 0, nil); MessageDlg('Echec lors du lancement de l''application !' + #13#10 + #13#10 + 'Application: ' + TAction(Sender).Hint + '.exe' + #13#10 + MsgBuf, mtError, [mbOK], 0); LocalFree(DWORD(MsgBuf^)); // <- là ??!! end; end;
La fonction FormatMessage allouant automatiquement la place nécessaire au buffer (LocalAlloc), j'utilise donc la fonction LocalFree pour la libération. Cette syntaxe ne bronche ni à la compilation ni à l'exécution, mais je garde un doute.
Bref c'est cool ou pas cool ?
Merci @+ Claudius
Partager