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

Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Dernière intervention
12 septembre 2013
- 6 févr. 2013 à 16:26 - Dernière réponse :
Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Dernière intervention
12 septembre 2013
- 15 févr. 2013 à 15:32
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)
Afficher la suite 

Votre réponse

7 réponses

Meilleure réponse
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
- 14 févr. 2013 à 21:07
2
Merci
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...

Merci yann_lo_san 2

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 88 internautes ce mois-ci

Commenter la réponse de yann_lo_san
Messages postés
224
Date d'inscription
vendredi 26 novembre 2010
Dernière intervention
11 juin 2013
- 6 févr. 2013 à 16:59
0
Merci
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".
Commenter la réponse de cs_L0ci
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 6 févr. 2013 à 18:09
0
Merci
Ou alors tu insères les classes de ton projet dll, dans ton projet exe et tu n'auras qu'un fichier.


Whismeril
Commenter la réponse de Whismeril
Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Dernière intervention
23 janvier 2016
- 6 févr. 2013 à 22:33
0
Merci
Salut,

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

bye...
Commenter la réponse de yann_lo_san
Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Dernière intervention
12 septembre 2013
- 7 févr. 2013 à 10:06
0
Merci
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.
Commenter la réponse de Woslike
Messages postés
12267
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
18 novembre 2018
- 7 févr. 2013 à 11:50
0
Merci
Je n'ai pas dit que c'est pratique, surtout si tu mets à jour ta dll dans son projet initial, mais ça marche.


Whismeril
Commenter la réponse de Whismeril
Messages postés
46
Date d'inscription
mercredi 25 juillet 2012
Dernière intervention
12 septembre 2013
- 15 févr. 2013 à 15:32
0
Merci
Merci beaucoup pour vos réponses!
Commenter la réponse de Woslike

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.