Extraction dun resource a partir dun fichier (dll ou exe) [Résolu]

cs_AgentAmine 28 Messages postés mercredi 24 juin 2009Date d'inscription 11 avril 2012 Dernière intervention - 26 déc. 2009 à 15:39 - Dernière réponse : cs_AgentAmine 28 Messages postés mercredi 24 juin 2009Date d'inscription 11 avril 2012 Dernière intervention
- 28 déc. 2009 à 12:15
Saluut,

je connais que ce procedure permet d'extrait un resource "ResName" de type "ResType" vers "ExtrPath" :

procedure ExtractFiles(ResName,ExtrPath:string;ResType:PAnsiChar);
var
rStream: TResourceStream;
fStream: TFileStream;
begin
if not FileExists(Path) then
begin
rStream := TResourceStream.Create( hInstance , ResName, ResType);
try
CreateDir(ExtractFilePath(Path));
fStream : = TFileStream.Create(Path, fmCreate);
try
fStream.CopyFrom(rStream, 0);
finally
fStream.Free;
end;
finally
rStream.Free;
end;
end;
end;

svp, comment modifier ce code pour extraire le resource apartir dun autre fichier (qui contient le meme resource), par ex: "c:\fichier.dll", il faut modifier hInstance ou ... ?
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
cs_rt15 3982 Messages postés mardi 8 mars 2005Date d'inscription 7 novembre 2014 Dernière intervention - 27 déc. 2009 à 09:24
3
Merci
Salut,

Oui, tu devrais essayer de remplace hInstance par autre chose.

2 cas possibles :
1) Soit la dll est déjà chargée en mémoire.
2) Soit elle ne l'est pas.

Tu es dans le premier cas si tu importes des fonctions de la dll :
procedure ... external XXXX.dll
ou que tu appelles LoadLibrary.

Si tu es dans le premier cas, tu peux appeler GetModuleHandle.

Si tu es dans le deuxième, il faut que tu appelles LoadLibrary (Et FreeLibrary à la fin).

Si tu ne sais pas si tu es dans le premier cas ou dans le deuxième, utilise la technique du deuxième. Appeler LoadLibrary 2 fois ne pose pas de problème : la librairie sera chargée une seule fois. De même les appels à FreeLibrary doivent être symétriques et tout fonctionne.

LoadLibrary()
// La lib est chargée
LoadLibrary()
// La lib n'est toujours chargée qu'une seule fois
FreeLibrary()
// La lib n'est pas déchargée
FreeLibrary()
// La lib est déchargée

Quoiqu'il arrive, le hInstance est la valeur de retour de GetModuleHandle et de LoadLibrary (Le HMODULE).

Merci cs_rt15 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 90 internautes ce mois-ci

Commenter la réponse de cs_rt15
cs_AgentAmine 28 Messages postés mercredi 24 juin 2009Date d'inscription 11 avril 2012 Dernière intervention - 28 déc. 2009 à 12:15
0
Merci
ok, rt15, ca marche parfaitement, merci
Commenter la réponse de cs_AgentAmine

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.