Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Utilisation des ressources d'un exécutable Dim 1 Mar 2015 - 23:57 | |
| Les fichiers inclus dans un exécutable en mode "création d'application" (TXT, BMP et JPG) sont inclus en tant que ressources. Mais je n'ai trouvé aucun moyen d'y accéder. Ai-je manqué quelque chose ? En tout cas, je propose une fonction du type: - Code:
-
RESOURCE_EXISTS(type$,name$) qui retournerait 1 si la ressource de type type$ et de nom name$ esxiste, et 0 sinon Et une commande du type: - Code:
-
RESOURCE_EXTRACT type$,name$,file$ qui déposerait dans le fichier file$ le contenu de la ressource de type type$ et de nom name$ En Delphi, dans une DLL, je sais faire. Mais tout l'intérêt de ces extension serait de pouvoir le faire en Panoramic pur, ce qui permettrait par exemple d'inclure une DLL (KGF.dll pour ne pas la nommer, dans mon cas) comme ressource, de l'extraire au lancement du progamme si la dll n'est pas déjà présente, puis de l'utiliser normalement. Idem pour des fichiers de configurations, même des fichiers ZIP contenant des arborescences entières. Car, avec l'aide de Jean-Claude, j'ai trouvé le moyen d'inclure tout cela dans l'exécutable en tant que ressource, sans qu'il soit nécessaire de changer la façon de créer l'application par l'éditeur de Panoramic. Dans KGF.dll, depuis longtemps, j'ai la fonction suivante: - Code:
-
// extraire une ressource existante et l'écrire dans un fichier function ExtractExistingResource(exefile, restype, resname, savefile: pstring):integer; stdcall; export; begin result := WriteResourcesToFile(exefile^, restype^, resname^, savefile^); end; Et la fonction WriteResourcesToFile est: - Code:
-
function WriteResourcesToFile(exefile, restype, resname, savefile: string):integer; var ms: TMemoryStream; cnt: integer; begin try ms := TMemoryStream.Create; result := GetResourcesData(exefile, restype, resname, ms); if result=0 then exit; ms.SaveToFile(savefile); ms.Free; finally end; end;
La fonction GetResourcesData est: - Code:
-
function GetResourcesData(exefile, restype, resname: string; var ms: TMemoryStream):integer; var hinst: HMODULE; var rs: TResourceStream; begin result := 0; try if not assigned(ms) then ms := TMemoryStream.Create; try hinst := LoadLibraryEx(PChar(exefile), 0, LOAD_LIBRARY_AS_DATAFILE); if FindResource(hinst, PChar(resname), Pchar(restype))<>0 then begin rs :=TResourceStream.Create(hinst, resname, PChar(restype)); rs.Position := 0; // rewind the stream ms.CopyFrom(rs,rs.Size); rs.Free; result := ms.Size; end; FreeLibrary(hinst); except end; finally end; end;
La fonction ExtractExistingResource est très simple et fait exactement ce que je recherche. Mais, le hic, c'est qu'il faut avoir KGF.dll... | |
|
JL35
Nombre de messages : 7095 Localisation : 77 Date d'inscription : 29/11/2007
| Sujet: Re: Utilisation des ressources d'un exécutable Lun 2 Mar 2015 - 13:09 | |
| Merci Jean-Claude ! | |
|
Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Utilisation des ressources d'un exécutable Lun 2 Mar 2015 - 14:26 | |
| Très bonne suggestion Jean-Claude. En plus comme Jack n'a plus rien dans son escarcelle, ça va l'occuper un peu depuis ses vacances à l'étranger ( ). Même suggestion que ce que j'ai mis sur un autre post, mais toujours peut être carrément en dehors de la plaque. Peut être faudrait il avoir un système de disque virtuel en mémoire pour pouvoir travailler (extraire les ressources vers ce lecteur virtuel et l'utiliser). Cela permettrait aussi de stocker tout type de fichier temporaire (images, batchs, etc ...) dans ce lecteur virtuel et de ne pas polluer les disques. Et comme sur l'autre poste, je m'excuse par avance si je suis hors sujet (dans ce cas, ce serait vraiment par ignorance et en aucun cas volontaire). | |
|
jean_debord
Nombre de messages : 1250 Age : 69 Localisation : Limoges Date d'inscription : 21/09/2008
| Sujet: Re: Utilisation des ressources d'un exécutable Mar 3 Mar 2015 - 9:00 | |
| Le compilateur Panoramic extrait une version complète de FreeBasic + une DLL Panoramic.dll + d'autres choses encore, tout cela à partir d'un seul exécutable ! Donc apparemment c'est faisable. | |
|
Jean Claude
Nombre de messages : 5950 Age : 69 Localisation : 83 Var Date d'inscription : 07/05/2009
| Sujet: Re: Utilisation des ressources d'un exécutable Mar 3 Mar 2015 - 10:15 | |
| Le jour où je vous sortirais des codes et des dll(s) aussi utiles et performants que ceux de Klaus, là vous pourrez dire "Merci Jean Claude". A+ | |
|
Klaus
Nombre de messages : 12301 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Utilisation des ressources d'un exécutable Mar 3 Mar 2015 - 10:37 | |
| J'ai l'impression que c'est plus complexe qu'il n'y paraît. L'ajout d'une ressource à un exécutable Panoramic se passe bien. Mais ensuite, cet exécutable n'est manifestement plus exécutable, bien que ResHacker montre que la structure est parfaitement valide. Cela doit avoir un lien avec le codage du code source de Panoramic dans l'exécutable - il ne s'y retrouve plus... Je continue mes recherches. | |
|
Jicehel
Nombre de messages : 5947 Age : 51 Localisation : 77500 Date d'inscription : 18/04/2011
| Sujet: Re: Utilisation des ressources d'un exécutable Mar 3 Mar 2015 - 11:11 | |
| Là, moi, vous m'avez perdu ^^ Je suis comme Jean-Claude à me demander si je peux concevoir des DLL, à me demander comment communiquer avec vous (sans doute privilégier le zip car c'est plus pratique). Je comprends bien l'interet de l'agglomération des ressources dans le fichier exe afin de faciliter la distribution ou de faire un install.exe qui contienne tout et qui extrait les ressources lors de l'installation (mais si j'ai bien tout compris, ça c'est déjà faisable avec KGF.DLL). Comme certaines manips ne peuvent pas avoir lieu en mémoire directement, on a parfois besoin d'écrire sur le disque et ça on ne peut pas trop faire autrement dans l'état actuel de Panoramic (On n'a pas l'quivalent d'un espace disque virtuel pour sauvegarder les fichiers comme sur le disque dur et travailler dessus, pour ça il faut que chacun installe s'il le souhaite un lecteur réseau virtuel). J'arrète donc de commenter et je laisse les pros avancer... | |
|
Contenu sponsorisé
| Sujet: Re: Utilisation des ressources d'un exécutable | |
| |
|