Inclure un fichier binaire (dll) ?!

Inclure un fichier binaire (dll) ?! - C++ - Programmation

Marsh Posté le 15-11-2004 à 18:36:05    

Bonjour,
 
J'aimerai savoir comment inclure une dll dans la section ".data" du futur fichier genere avec VC++  :??:  
 
J'ai essaye plein de trucs comme #Includebinary & co ( :lol: ) mais sans succes.
J'ai alors opter pour quelque chose de ce genre :
 

Code :
  1. char Dll[] = "\x4D\x5A\x90\x00\x03\x00\x00\x00\x04\x00\x00\x00  [...]";


 
Mais evidemment a la compilation ca me renvoit une erreur en disant quela chaine est trop longue...  [:t3xla]  
 
Bref il n'y aucune solution a pars les mettre sous forme de resources a l'executable ?  :pfff:

Reply

Marsh Posté le 15-11-2004 à 18:36:05   

Reply

Marsh Posté le 15-11-2004 à 19:23:26    

beurk

Reply

Marsh Posté le 15-11-2004 à 20:02:37    

Merci ca m'a beaucoup aidé  [:spamafote]

Reply

Marsh Posté le 15-11-2004 à 20:47:27    

Help c'est urgent  [:zoutte]

Reply

Marsh Posté le 15-11-2004 à 21:13:56    

Il me semble que ce genre de truc se fait par custom resource.  
 
Mais j'suis d'accord avec serge, c'est crade d'embarquer la dll dans l'exe. Autant compiler la lib en static :heink: et linker proprement.

Reply

Marsh Posté le 15-11-2004 à 21:20:50    

Surtout je vois pas trop à quoi ça sert... Met en resource et on en parle plus.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 15-11-2004 à 21:25:20    

retrox a écrit :

Il me semble que ce genre de truc se fait par custom resource.  
 
Mais j'suis d'accord avec serge, c'est crade d'embarquer la dll dans l'exe. Autant compiler la lib en static :heink: et linker proprement.


Ouais quand tu as le .lib ou le code source de la dll  :o

Reply

Marsh Posté le 15-11-2004 à 21:30:36    

Tu peut toujours essayer ça : http://www.binary-soft.com/dll2lib/dll2lib.htm
J'ai trouvé ça en cherchant un peut mais ça ne me donne pas du tout confiance.
 
De toute façon, j'ai bien peut que ce que tu demandes soit très compliqué. Je ne suis pas un pro en assembleur et autre formats de fichiers executables, mais il me semble que ça risque de poser quelques problèmes :

  • initialisation de variables globales / statiques à l'intérieur de la DLL
  • appel de la fonction DllMain (peut être pas impossible tout de même)
  • et d'autres auxquels je ne pense pas...

Mais bon, à la base les dlls ne sont pas faites pour être intégrées dans un executable !


---------------
each day I don't die is cheating
Reply

Marsh Posté le 15-11-2004 à 21:33:53    

Inclure la dll dans l'exe ne fait aucune différence avec inclure une image ou autre chose. Ca sera considéré comme de la donnée brute et non une dll.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 15-11-2004 à 21:34:59    

Code :
  1. FindResource(GetModuleHandle(NULL), "DLL", "DATA" );
  2. GetLastError();


 
L'erreur c'est l'erreur 0x715 = "The specified resource type cannot be found in the image file.'
 
Et dans le fichier rc, une seul ligne:
DLL DATA DISCARDABLE "xxx.dll"
 
Je comprends vraiment pas pourquoi ca marche pas  [:spamafote]


Message édité par AthlonSoldier le 15-11-2004 à 21:35:49
Reply

Marsh Posté le 15-11-2004 à 21:34:59   

Reply

Marsh Posté le 16-11-2004 à 02:14:24    

Bo c'est pas vraiment sale, des fois t'as pas les sources donc tu peux pas compiler en statique, et tu veux n'avoir qu'un fichier. Les écoute pas tous ces méchants mon bon AthlonSoldier. Exemple de l'utilisation de BASS, librairie audio, un truc vieux donc je me souviens pas forcément bien hein. Note: c'est du gcc mingw, donc avec leurs outils pour les ressources (remarque ça passait ptet aussi sous vc, je sais plus, au pire y'a pas grands changements).
 
dans le .rc:

Code :
  1. #ifdef MAKE_ONEFILE
  2. BASS_DLL RCDATA
  3. BEGIN
  4. #include "../data/bass.dll.h"
  5. END
  6. DEMO_MUSIC RCDATA
  7. BEGIN
  8. #include "../data/music.h"
  9. END
  10. #endif


 
Donc le bass.dll.h ça ressemble à ça:

Code :
  1. 23117,144,3,0,4,0,65535,0,
  2. 184,0,0,0,64,0,0,0,
  3. 0,0,0,0,0,0,0,0,
  4. 0,0,0,0,0,0,68,0,
  5. 8397,0,17744,0,332,2,57557,15803,
  6. 0,0,0,0,224,8462,267,6,
  7. 12273,5,12273,5,0,0,12355,5,
  8. 4096,0,40960,2,0,4096,4096,0,
  9. 512,0,4,0,1,7,4,0,
  10. 0,0,16384,5,512,0,0,0,
  11. ...


C'est créé avec un bête soft qui fait bin to ascii. Bref tu peux choper ça sur le net ou le coder en 2s.
 
Ensuite faut extraire ta dll dynamiquement et la charger dynamique, et donc tous tes appels de fonctions se font par pointeurs.
WinDemoManager.h:

Code :
  1. class WinDemoManager
  2. {
  3. #ifdef MAKE_ONEFILE
  4.   char *bass_dll;
  5.   void *demo_zic;
  6. #endif
  7. ...
  8. };


Bon bah pointeurs sur les données...
 
WinDemoManager.cpp:

Code :
  1. #define BASSDEF(f) (WINAPI *f)
  2. #include <BASS/bass.h>
  3. /*
  4. Alors là BASS est cool et avait prévu le coup ;) En fait ça fait que son .h va tout définir en pointeurs WINAPI*.
  5. */
  6. ...
  7. // Charge la fonction f a partir de la librairie l
  8. #define LOADLIBFUNCTION(l, f) (void*)f = GetProcAddress(l, #f)
  9. ...
  10. /**
  11. * Charge les dll non liees automatiquement
  12. */
  13. inline void WinDemoManager::loadData()
  14. {
  15.   #ifdef MAKE_ONEFILE
  16.   try
  17.   {
  18.     bass_dll = WinDataLoader::resourceToTempFile("BASS_DLL" );
  19.     if(!(bass = LoadLibrary(bass_dll))) throw DefaultException("Unable to load library" );
  20.     demo_zic = WinDataLoader::resourcePointer("DEMO_MUSIC" );
  21.   } catch(exception e) {
  22.     if(bass_dll) DeleteFile(bass_dll);
  23.     throw;
  24.   }
  25.   #else
  26.   if(!(bass = LoadLibrary("bass.dll" ))) throw DefaultException("Unable to load library" );
  27.   #endif
  28.   LOADLIBFUNCTION(bass, BASS_ChannelSetSync);
  29.   LOADLIBFUNCTION(bass, BASS_ErrorGetCode);
  30.   LOADLIBFUNCTION(bass, BASS_Free);
  31.   LOADLIBFUNCTION(bass, BASS_GetVersion);
  32.   LOADLIBFUNCTION(bass, BASS_Init);
  33.   LOADLIBFUNCTION(bass, BASS_MusicLoad);
  34.   LOADLIBFUNCTION(bass, BASS_MusicPlay);
  35.   LOADLIBFUNCTION(bass, BASS_Start);
  36.   LOADLIBFUNCTION(bass, BASS_StreamCreateFile);
  37.   LOADLIBFUNCTION(bass, BASS_StreamPlay);
  38. }


Donc là bêtement ça mets tous les pointeurs définit dans le bass.h à la bonne valeur. Et c'est gagné tu peux appeler tes fonctions.
 
Le code de WinDataLoader:

Code :
  1. #include <string>
  2. #include <iostream>
  3. #include <sstream>
  4. #include "WinDataLoader.h"
  5. using std::ostringstream;
  6. void * WinDataLoader::resourcePointer(const char *resourceName, HINSTANCE hInst) throw(DefaultException)
  7. {
  8.   if(!hInst) hInst = GetModuleHandle(NULL);
  9.   // Obtient la ressource
  10.   HRSRC hRes;
  11.   void *data;
  12.   if(   !(hRes = FindResource(hInst, resourceName, RT_RCDATA))
  13.      || !(hRes = (HRSRC) LoadResource(NULL, hRes))
  14.      || !(data = (void*) LockResource(hRes))
  15.     )
  16.   {
  17.     ostringstream os;
  18.     os << "Unable to get resource " << resourceName;
  19.     throw DefaultException(os.str());
  20.   }
  21.   return data;
  22. }
  23. char * WinDataLoader::resourceToTempFile(const char *resourceName, HINSTANCE hInst) throw(DefaultException)
  24. {
  25.   if(!hInst) hInst = GetModuleHandle(NULL);
  26.   // Obtient la ressource
  27.   HRSRC hRes;
  28.   DWORD resLength;
  29.   BYTE *data;
  30.   if(   !(hRes = FindResource(hInst, resourceName, RT_RCDATA))
  31.      || !(resLength = SizeofResource(NULL, hRes))
  32.      || !(hRes = (HRSRC) LoadResource(NULL, hRes))
  33.      || !(data = (BYTE*) LockResource(hRes))
  34.     )
  35.   {
  36.     ostringstream os;
  37.     os << "Unable to get resource " << resourceName;
  38.     throw DefaultException(os.str());
  39.   }
  40.   // Copie la ressource dans un fichier temporaire
  41.   char tempPath[MAX_PATH];
  42.   char *tempFile = new char[MAX_PATH];
  43.   try
  44.   {
  45.     GetTempPath(MAX_PATH, tempPath);
  46.     GetTempFileName(tempPath, resourceName, 0, tempFile);
  47.     HANDLE hFile = CreateFile(tempFile, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_TEMPORARY, NULL);
  48.     if(hFile == INVALID_HANDLE_VALUE) throw DefaultException("Unable to create lib file to temp path" );
  49.     DWORD written;
  50.     WriteFile(hFile, data, resLength, &written, NULL);
  51.     CloseHandle(hFile);
  52.   } catch(DefaultException e) {
  53.     delete[] tempFile;
  54.     throw;
  55.   }
  56.   return tempFile;
  57. }


Alors là ça extrait une ressource dans un fichier, dans un dossier temporaire. T'as plus qu'à faire le LoadLibrary sur ce fichier.
 
Valà je pense que y'a tout. Alors y'a des chance par contre que tu aies à modifier le .h (les...) de ta dll si c'est pas prévu comme pour BASS.

Reply

Marsh Posté le 16-11-2004 à 06:11:09    

Je crois que le truc que t'as pas compris, c'est que tu n'as pas besoin des sources pour linker statiquement. Sous linux :

/home/nicolas/tmp% gcc -o lib_static -static -lc lib.c
/home/nicolas/tmp% gcc -o lib_dynamic -lc lib.c
/home/nicolas/tmp% ls -l lib*
-rw-r--r--  1 nicolas users     67 Nov 15 23:07 lib.c
-rwxr-xr-x  1 nicolas users   6844 Nov 15 23:07 lib_dynamic
-rwxr-xr-x  1 nicolas users 469032 Nov 15 23:07 lib_static
/home/nicolas/tmp% ldd lib_*
lib_dynamic:
        linux-gate.so.1 =>  (0xffffe000)
        libc.so.6 => /lib/libc.so.6 (0x40032000)
        /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
lib_static:
        not a dynamic executable
/home/nicolas/tmp% ./lib_dynamic
Hello World
/home/nicolas/tmp% ./lib_static
Hello World


 
Edit : j'ajoute le test qui tue :D

/home/nicolas/tmp# chroot . ./lib_dynamic
chroot: cannot run command `./lib_dynamic': No such file or directory
/home/nicolas/tmp# chroot . ./lib_static
Hello World


Message édité par matafan le 16-11-2004 à 06:20:51
Reply

Marsh Posté le 16-11-2004 à 07:32:04    

Merci d'avoir pris la peine de répondre a vous deux  :jap:  :love:  
Mais j'ai trouvé une soluction crade en faisant un :
 

Code :
  1. unsigned char Dll[] = { ... };


 
 [:yopyop-]

Reply

Marsh Posté le 16-11-2004 à 10:37:40    

Mettre une dll en resource pour la recréer à chaque lancement pour la charger puis l'effacer... Je suis pas convaincu de l'intérrêt en plus de la difficulté de faire la chose dès que y'a une classe à importer.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 16-11-2004 à 12:37:22    

matafan > il est sous windows avec vc... certes j'ai aussi un .sh qui transforme un .la en .dll, et vu la gueule du truc ça doit être faisable dans l'autre sens. Et franchement ton exemple... je vois pas le rapport. Où t'as prouvé que t'avais pas les .la des 3 libs dans ton path ? Bon quoiqu'il en soit un .so et un .dll ça n'a rien à voir (l'un est super l'autre est pourri).
 
HelloWorld > certes.

Reply

Marsh Posté le 16-11-2004 à 18:37:37    

HelloWorld a écrit :

Mettre une dll en resource pour la recréer à chaque lancement pour la charger puis l'effacer... Je suis pas convaincu de l'intérrêt en plus de la difficulté de faire la chose dès que y'a une classe à importer.


C'est surtout que dans certain cas tu veux qu'il y est juste un exe sans dll  [:t3xla]  
Mais ca tu dois pas connaitre  [:spamafote]

Reply

Marsh Posté le 16-11-2004 à 19:57:57    

Supair...
Quand ton exe est linké avec une dll tu peux faire ce que tu veux il faut la dll, à part quelque part sur le disque.
Sinon je connais un truc, ça s'appelle les installeurs, les zips autroextractibles, etc...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 17-11-2004 à 09:13:06    

Et si tu veux garder un seul exe, en zippant, t'es obligé de te faire un autre prog qui va dropper l'exe et tous les fichiers nécessaires dans un dossier temp. Bref t'arrête 2s: y'a des gens qui veulent qu'on double-click sur le fichier exe/com et qu'il se lance direct, que ce soit à l'intérieur d'un zip ou autre sans avoir à créer un dossier, extraire des trucs, en installer d'autres, etc. Me réponds pas win xp, tout le monde ne l'a pas. Bref si AthlonSoldier voulait le faire, si moi je l'avait déjà fait, et si des distributeurs de lib comme BASS (qui n'est pas rien: ça lit des ogg, des mod, des mp3, des mo3 (mod compressés en mp3), etc.) ont inclus cette fonctionnalité c'est que y'avait une demande. Toi tu le fais pas c'est cool, c'est pas une raison pour débarquer avec ton pessimisme.
Et oui on connait les chemins de recherche et on sait ce qu'est une dll merci.

Reply

Marsh Posté le 17-11-2004 à 11:08:58    

En fait je pensais à un zip autoextractible, option de winzip...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 17-11-2004 à 14:42:34    

Oui et si tu compare 2s les deux solutions tu remarques qu'elles n'ont rien en commun... Un zip est un zip et s'extrait quelque part, même automatiquement, un exe se lance et l'utilisateur n'a pas à choisir un chemin ou quoique ce soit.
Bon c'est mon dernier post dans ce thread, le débat est stérile: un gars a posé une question, si tu veux discuter de l'intérêt du truc c'est pas le même sujet.

Reply

Marsh Posté le 17-11-2004 à 15:03:49    

C'est toi qui t'énerves tout seul. Il a demandé à inclure une dll, il a pas dit que c'était pour l'extraire. J'ai voulu savoir si des fois il espérait pas transformer ainsi sa dll en lib statique. D'où ma question & remarque. Toi tu sais peut être bien ce qu'est une dll, mais c'est pas le cas de tout le monde. Des cas de ce genre on en a déjà vu.
Pour BASS, je connais pas, mais je vois pas pourquoi ils ont pas simplement créé une version statique de la lib. C'est peut être une super lib, mais le code que tu as posté contient des fuites de mémoire, y'a pas le FreeLibrary, etc...


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 17-11-2004 à 15:13:47    

Pfou... eh j'ai posté un BOUT de code... si tu notes y'a pas le destructeur de ma classe, qui évidemment contient le FreeLibrary... Arrête 2s, je suppose que le gars sait coder en lisant l'explication, le but n'est pas de fournir un code à copier coller. Après tu vas encore dire que je m'énerve tout seul avec des remarques bidons comme celle-ci... Puis c'est sûr que si tu supposes que le gars sait pas ce qu'il veut faire en lisant sa question et que tu lui en poses 10 avant de lui répondre on va pas avancer.
Ils filent pas de version statique parce que faudrait en filer 300 versions pour tous les compilos, dans tous les modes de compil imaginables. D'autres exemples ? Tokamak (librairie physique temps réel très rapide) file que sous forme de dll aussi.

Reply

Marsh Posté le 17-11-2004 à 15:45:05    

g012 a écrit :

D'autres exemples ? Tokamak (librairie physique temps réel très rapide) file que sous forme de dll aussi.


Perdu, y'a 4 lib statiques fournies (mono/multithread, release/debug).
Bon t'as pas eu de chance je te l'accorde.
Ok ok y'a des libs que sous forme de dll. Le probleme il est pas là. Quand t'as des dll à trimballer (ce qui devient la règle car le moindre prog compilé avec VC++ >= 7 nécessite 1 ou 2 dll à refourguer avec l'exe, mais on peut lier en statique) on fait pas de la bidouille, on fait un joli paquet en 2 minutes avec un installeur.
Un truc idiot : si tu lances 2 fois ton exe, hop tu dupliques toutes tes dll. En plus d'avoir un exe plus gros déjà (car il embarque la dll), tu dupliques encore une fois la dll en mémoire pour chaque process.
Et bon de toutes façons cette technique de linking dynamique est vite limitée dès qu'on est en C++ (name mangling).
Cette solution de dll embarquée me semble valable dans le cas où l'exe fait aussi office d'installeur. Mais c'est assez rare, surtout maintenant que des softs permettent de très facilement en faire un.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 17-11-2004 à 16:25:15    

Bon cette fois c'est pour de vrai que c le dernier post.
Tokamak a certes 4 libs statiques, pour vc je sais plus quelle version, et UNIQUEMENT pour utiliser la dll. Ça n'est nullement des lib statiques autonomes (tu as BESOIN de la dll pour utiliser ton exe). Avant de poster avec des phrases insultantes style "perdu machin", tu devrais faire plus qu'extraire le zip du site et vaguement regarder ce qu'il contient. Et de plus quid de mingw, cygwin, etc. ? J'ai la vague impression que t'as une tête de 500 km de diamètre et que tu t'amuses avec ta mauvaise foi. Tu fais exprès de pas comprendre. Le but n'est pas de faire un installeur. Le but est de lancer l'exe et c'est tout sans aucune dépendances. L'optique de la réutilisabilité des dll, etc. n'a rien à voir. Bon puisque vraiment tu insites lourdement pour faire exprès de pas comprendre: t'as une démo disons, dans un zip (typiquement la façon dont c'est distribué sur scene.org), et tu veux pas forcer l'utilisateur à extraire 40 fichier mais juste à lancer l'exe depuis le zip. Voilà. Pfouuuuuuuuuuuuuuuuuuuuuu.

Reply

Marsh Posté le 17-11-2004 à 17:10:50    

g012 a écrit :

Bon cette fois c'est pour de vrai que c le dernier post.
Tokamak a certes 4 libs statiques, pour vc je sais plus quelle version, et UNIQUEMENT pour utiliser la dll. Ça n'est nullement des lib statiques autonomes (tu as BESOIN de la dll pour utiliser ton exe).


:gratgrat:
Je commence à douter que tu saches ce qu'est une dll. Y'a un lib par dll, c'est tout. Je suis désolé de te décevoir, mais les 4 libs sont bien des libs statiques (et donc autonome).

Citation :


C:\Documents and Settings\Administrateur>lib /LIST "C:\Documents and Settings\Ad
ministrateur\Bureau\tokamak_sample_1_2\lib\tokamak.lib"
Microsoft (R) Library Manager Version 7.10.3052
Copyright (C) Microsoft Corporation.  All rights reserved.
 
.\tmp\Release\useopcode.obj
.\tmp\Release\tricollision.obj
.\tmp\Release\stack.obj
.\tmp\Release\sphere.obj
.\tmp\Release\solver.obj
.\tmp\Release\simulator.obj
.\tmp\Release\scenery.obj
.\tmp\Release\rigidbodybase.obj
.\tmp\Release\rigidbody.obj
.\tmp\Release\restcontact.obj
.\tmp\Release\region.obj
.\tmp\Release\perfwin32.obj
.\tmp\Release\ne_interface.obj
.\tmp\Release\lines.obj
.\tmp\Release\dcd.obj
.\tmp\Release\cylinder.obj
.\tmp\Release\constraint.obj
.\tmp\Release\collisionbody.obj
.\tmp\Release\collision.obj
.\tmp\Release\boxcylinder.obj


 
De plus, par défaut ça n'utilise pas la dll, il faut définir TOKAMAK_USE_DLL

Code :
  1. #ifdef TOKAMAK_USE_DLL
  2. #ifdef TOKAMAK_DLL_EXPORTS
  3. #define TOKAMAK_API __declspec(dllexport)
  4. #else
  5. #define TOKAMAK_API __declspec(dllimport)
  6. #endif
  7. #else
  8. #define TOKAMAK_API
  9. #endif


 

Citation :

Avant de poster avec des phrases insultantes style "perdu machin", tu devrais faire plus qu'extraire le zip du site et vaguement regarder ce qu'il contient. Et de plus quid de mingw, cygwin, etc. ? J'ai la vague impression que t'as une tête de 500 km de diamètre et que tu t'amuses avec ta mauvaise foi.


Ah bon je t'ai insulté... Et au passage un tête de 500km de diamèter c'est pas possible, je me congnerais aux sattelites.
 

Citation :

Tu fais exprès de pas comprendre. Le but n'est pas de faire un installeur. Le but est de lancer l'exe et c'est tout sans aucune dépendances. L'optique de la réutilisabilité des dll, etc. n'a rien à voir. Bon puisque vraiment tu insites lourdement pour faire exprès de pas comprendre: t'as une démo disons, dans un zip (typiquement la façon dont c'est distribué sur scene.org), et tu veux pas forcer l'utilisateur à extraire 40 fichier mais juste à lancer l'exe depuis le zip. Voilà. Pfouuuuuuuuuuuuuuuuuuuuuu.


On est d'accord, ce n'est pas une chose pratiquée par des applis professionnelles. De toutes façons moi j'utilise WinRar et il dézippe tout quand je lance un exe :p
 
C'est minable, mais j'ai envie de le faire quand même : si tu réponds pas c'est que t'as une p'tite bite.


Message édité par HelloWorld le 17-11-2004 à 17:11:26

---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 17-11-2004 à 17:20:25    

Citation :

De plus, par défaut ça n'utilise pas la dll, il faut définir TOKAMAK_USE_DLL


OK je viens de télécharger la dernière version. Ça n'y était pas avant. Enfin ça ne change rien à ce que je disais: t'as pas la lib pour mingw par exemple. Donc le pb reste entier dès que t'as une dll et pas de sources.
Enfin bref content de voir que t'as ENFIN admis que y'en a qui veulent faire ça et qu'ils sont pas cinglés pour autant...
PS: j'utilise aussi winrar, mais quand on distribue un truc... tout le monde n'a pas la mm chose sur son pc.

Reply

Marsh Posté le 17-11-2004 à 17:24:38    

Au passage ma première réponse un peu aggressive ne t'était pas detinée.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 17-11-2004 à 23:14:06    

HelloWorld a écrit :

Supair...
Quand ton exe est linké avec une dll tu peux faire ce que tu veux il faut la dll, à part quelque part sur le disque.
Sinon je connais un truc, ça s'appelle les installeurs, les zips autroextractibles, etc...


Qui te dit que je crée un shareware ou tout autre logiciel pour être distribué publiquement ?  :??:

Reply

Marsh Posté le 17-11-2004 à 23:19:37    

D'alleurs c'etait une DLL (où j'en inclué une autre) meme pas un EXE, alors accroche toi pour l'execute ou l'installer par un installeur (pas de sens) :whistle:

Reply

Marsh Posté le 17-11-2004 à 23:26:37    

Ah ouai pas con : cette dll est à son tour incluse dans un exe et ça fait des poupées russes :sol:


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 18-11-2004 à 07:16:11    

Ouah comme t'es marrant  :sweat:

Reply

Marsh Posté le 20-11-2004 à 15:04:50    

J'ai eu utilisé nasm et son incbin pour faire ce genre de chose, le tout en custom build step sous visual.

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed