padsou
Messages postés121Date d'inscriptionjeudi 24 janvier 2002StatutMembreDernière intervention13 avril 2010
-
27 sept. 2005 à 16:52
bv94
Messages postés40Date d'inscriptiondimanche 2 février 2003StatutMembreDernière intervention16 décembre 2006
-
5 oct. 2005 à 12:42
Bonjour !
J'ai un souci : Je libère ma Dll et quand je ferme mon application j'ai une erreur "opération de pointeur incorrecte". Si je ne la libère pas je n'ai pas ce message. voici mon code :
procedure CloseLinkDll;
var
hDll: THandle;
begin
if fileexists('madll.dll') then
begin
hDll := LoadLibrary(pAnsiChar('madll.dll'));
if hDll = 0 then
Exit;
FreeLibrary(hDll);
end;
end;
function CloseDll: boolean;
begin
try
DataModule1.ADOQuery1.Close;
DataModule1.ADOTable1.Close;
DataModule1.ADOTable2.Close;
DataModule1.ADOConnection1.Connected := False;
if FileConf <> nil then
FreeAndNil(FileConf);
if CherStringList <> nil then
FreeAndNil(CherStringList);
if GroupeMessageList <> nil then
FreeAndNil(GroupeMessageList);
if DataModule1 <> nil then
FreeAndNil(DataModule1);
finally
Result := True;
end;
end;
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 2 oct. 2005 à 08:40
Déjà, je commencerais par modifier le code pour éviter de renvoyer vrai dans tous les cas car, sinon, à quoi cela servirait-il de créer une fonction ?
function CloseDll: boolean;
begin
try
DataModule1.ADOQuery1.Close;
DataModule1.ADOTable1.Close;
DataModule1.ADOTable2.Close;
DataModule1.ADOConnection1.Connected := False;
if FileConf <> nil then
FreeAndNil(FileConf);
if CherStringList <> nil then
FreeAndNil(CherStringList);
if GroupeMessageList <> nil then
FreeAndNil(GroupeMessageList);
if DataModule1 <> nil then
FreeAndNil(DataModule1);
Result := True;
Except
Result := False;
end;
end;
Lors du chargement de la DLL dans l'application principale, pourquoi ne pas conserver le handle de la librairie dans une variable globale ? Ainsi, au moment de la fermeture, il suffit de passer le même Handle lors de l'appel à CloseLibrary :
procedure CloseLinkDll;
begin
if hDll <> 0 then
FreeLibrary(hDll);
end;
Je note aussi que dans la ligne : hDll := LoadLibrary(pAnsiChar('madll.dll'));
la conversion en PAnsiChar est superflue
<HR color=#008000>
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
padsou
Messages postés121Date d'inscriptionjeudi 24 janvier 2002StatutMembreDernière intervention13 avril 2010 3 oct. 2005 à 09:30
certes mais ceci n'était qu'un erzatz de code. Je l'ai modifié depuis, en passant notamment le handle en variable globale mais rien n'y faisait jusqu'à ce week end où je décide de passer l'appel de la Dll en mode statique. Merci quand même de vos remarques !
Vous n’avez pas trouvé la réponse que vous recherchez ?