Je travaille sur une application qui utilise FastMM4
, de sourceforge.net. J'ai donc ajouté le FastMM4.pas
à la clause uses dès le début. Dans l'application que je dois exécuter un fichier batch
après FinalizeMemoryManager;
dans le finalization
de unit FastMM4;
comme celui-cidelphi 7, FastMM4 ne peut pas installer de travail autour de
initialization
RunInitializationCode;
finalization
{$ifndef PatchBCBTerminate}
FinalizeMemoryManager;
RunTheBatFileAtTheEnd; //my code here..calling a procedure
{$endif}
end.
alors mon code pour RunTheBatFileAtTheEnd est:
procedure RunTheBatFileAtTheEnd;
begin
//some code here....
sFilePaTh:=SysUtils.ExtractFilePath(applicaTname)+sFileNameNoextension+'_log.nam';
ShellExecute(applcatiOnHAndle,'open', pchar(sExeName),pchar(sFilePaTh), nil, SW_SHOWNORMAL) ;
end;
Pour cela, je dois utiliser SysUtils,shellapi
dans la clause uses de l'unité fastmm4. Mais les utiliser ce message vient
Mais si je retire SysUtils,shellapi
de l'utilise cela fonctionne. J'ai encore besoin de toutes les fonctionnalités de fastmm4 installées mais avec SysUtils,shellapi
, fastmm4 n'est pas installé
J'ai une unité à part, mais sa finalisation est exécutée avant la finalisation fastmm4.
quelqu'un peut-il me dire comment résoudre ce problème?
EDIT- 1
unit FastMM4;
//...
...
implementation
uses
{$ifndef Linux}Windows,{$ifdef FullDebugMode}{$ifdef Delphi4or5}ShlObj,{$else}
SHFolder,{$endif}{$endif}{$else}Libc,{$endif}FastMM4Messages,SysUtils,shellapi;
ma demande
program memCheckTest;
uses
FastMM4,
EDIT-2:
(après @SertacAkyuz réponse), je l'ai enlevé SysUtils
et cela a fonctionné, mais J'ai encore besoin d'exécuter le fichier batch pour ouvrir une application externe via RunTheBatFileAtTheEnd
. La raison est .. je veux qu'une application externe s'exécute seulement après que FastMM4 ait été sur le finalization
. Le sExeName
est l'application qui va exécuter le fichier sFilePaTh
(.nam). quelqu'un peut-il dire comment faire cela? sans uninstalling FastMM4
.
Qui utilise la clause? Si dans l'interface, vous faites dépendre FastMM4 d'eux et ils seront initialisés en premier incluant toutes les unités dont ils dépendent. Toute allocation de mémoire effectuée ici provoquerait cela. Avez-vous essayé de déplacer les deux unités à la clause de mise en œuvre? Cela devrait changer l'ordre de dépendance. –
@MarjanVenema: j'ai ajouté un nouveau code pour la clause uses, 'SysUtils, shellapi;' est dans la 'implementation' – PresleyDias
Vous devez faire sans 'sysutils'. Le code dans la section d'initialisation de 'sysutils' doit allouer de la mémoire, par conséquent le gestionnaire de mémoire doit être défini. –