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 : 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 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