Étant donné que j'ai eu beaucoup de mal à utiliser les DLL, j'ai décidé d'essayer les paquets d'exécution (principalement pour éviter le gestionnaire de mémoire et les problèmes de registre de type).Gestion de la mémoire des paquets
De ma demande je fais quelque chose comme ceci:
HandleList := TList <THandle>.Create;
try
PackageObj.DoSomething (HandleList);
finally
FreeAndNil (HandleList);
end;
La méthode (à l'intérieur du paquet d'exécution) ajoute quelque chose à la liste:
procedure TPackageObject.DoSomething (HandleList: TList <THandle>);
begin
HandleList.Clear;
HandleList.Add (0);
end;
Je reçois Invalid Pointer
exception soit dans la appelez au Clear
dans le paquet ou dans l'appel à FreeAndNil
dans l'application. Les violations d'accès se produisent également de temps en temps. Lors de l'utilisation de FastMM, il est parfois indiqué que "l'en-tête du bloc a été corrompu".
L'erreur se produit toujours lorsque la mémoire est allouée ou libérée, c'est-à-dire en ajoutant quelque chose à la liste et en provoquant ainsi une croissance dynamique de la liste.
Est-ce que la façon dont l'objet HandleList
est transmis au paquet et de retour est correcte? Y a-t-il quelque chose d'important à savoir sur les paquets et la gestion de la mémoire? Ou l'erreur doit-elle être ailleurs?
EDIT Dans le cas où l'erreur est susceptible d'être ailleurs, comment suis-je supposé déboguer quelque chose comme ça? Des expériences?
C'est correct et aucun problème n'est à prévoir. A moins que le truc générique te joue des tours. Quelle version de Delphi utilisez-vous et comment avez-vous configuré FastMM? –
J'utilise D2010 et FullDebugMode de FastMM. – jpfollenius