Intégrer ma DLL dans mon EXE [Résolu]

Signaler
Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Statut
Membre
Dernière intervention
12 septembre 2013
-
Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Statut
Membre
Dernière intervention
12 septembre 2013
-
Bonjour tout le monde,

J'ai créé dernièrement une DLL qui comporte deux fonctions qui permettent de crypter et décrypter une chaîne de caractère.

J'ai aussi créer un petit logiciel qui me permet de tester ma DLL et de l'utiliser, seulement, je suis obliger d'avoir ma dll avec mon exécutable pour que mon programme fonctionne.

J'aimerai n'avoir qu'un seul exécutable avec la dll intégré à l'exécutable. J'ai fais énormément de recherche, je n'ai rien trouvé qui me permet de faire cela... Quelqu'un pourrai m'aider ?

Je vous remercie d'avance pour vos réponses!

Voici le code de la DLL et le programme :

la DLL :



le Programme :
(il est très simple, il appel les fonctions "cryptage" et "decryptage" de la dll pour transformer les données de la textbox blanche vers la textbox grise)

7 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
19
Salut,

Voici les étapes à suivre :

1 : Faire un click droit sur le projet puis "ajouter un élément existant"
pointer sur la dll, elle s'ajoute au projet

2 : faire click droit dessus puis mettre "embeded resource" dans les proriétés

3 : Le programe devra rendre visible cette dll au clr (framework .net)
lors de l'exécution du programme. A cette fin, un évènement existe et permet de fournir les octets de l'assembly au moteur .net.
Donc, dans le construteur de ta Form principale, il faut ajouter l'évènement suivant :

using System.Reflection;

public frmMainMDI() // .Ctor du formulaire principal de l'app
{
    InitializeComponent();

    // Chargement différé de l'asm "Embeded Resource"
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurDomain_AsmResolve);
}


4 : Fournir le callback afin de charger l'assembly "non résolu" par le clr (je rappelle que la ressource est nommée NAMESPACE.NOMASSEMBY.DLL)

Assembly CurDomain_AsmResolve(object sender, ResolveEventArgs args)
{
    try
    {
        string resourceName = GetType().Namespace + "." + new AssemblyName(args.Name).Name + ".dll";

        using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName))
        {
            byte[] assemblyData = new Byte[stream.Length];
            stream.Read(assemblyData, 0, assemblyData.Length);
            return Assembly.Load(assemblyData);
        }

        throw new Exception("ManifestResource : " + resourceName + " not found !");
    }
    catch (Exception ex)
    {
        // Tracer l'exception quelquepart => TRACE("echec load assembly " + args.Name);
        return null;
    }
}


Voilà. Je vous invite à lire de la doc. sur la reflexion et l'outil de désassemblage ILDasm.exe.

bye...
Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Statut
Membre
Dernière intervention
12 septembre 2013
1
Merci beaucoup pour vos réponses!
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Statut
Membre
Dernière intervention
11 juin 2013
2
Bonjour,

Si ta dll est intégrée dans les références de ton projet elle devrait être incluse dans l'exe. Vérifie que dans les Actions de génération elle soit bien définie en "ressource".
Messages postés
14749
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 septembre 2020
433
Ou alors tu insères les classes de ton projet dll, dans ton projet exe et tu n'auras qu'un fichier.


Whismeril
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
19
Salut,

il faut que la dll soit marquée "Ressource embarquée" ou "embeded resource"
dans la page des propriétés.

bye...
Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Statut
Membre
Dernière intervention
12 septembre 2013
1
Je vous remercie, mais je suis toujours bloqué

> "Ressource embarquée" ou "Ressource" ( "Ressource incorporée" ) ne fonctionne pas, j'ai toujours la même erreur ( J'ai oublié une étape ? )

=> Whismeril : Je pense que je vais rajouter le CODE directement dans le projet du programme... mais je ne trouve pas sa pratique.
Messages postés
14749
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 septembre 2020
433
Je n'ai pas dit que c'est pratique, surtout si tu mets à jour ta dll dans son projet initial, mais ça marche.


Whismeril