[API] Fonctions FormatMessage et LocalFree
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:
Code:
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 LauchApp est un simple ShellExecute dont je récupère le résultat dans lRet.
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