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

Woslike 46 Messages postés mercredi 25 juillet 2012Date d'inscription 12 septembre 2013 Dernière intervention - 6 févr. 2013 à 16:26 - Dernière réponse : Woslike 46 Messages postés mercredi 25 juillet 2012Date d'inscription 12 septembre 2013 Dernière intervention
- 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
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 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

codes-sources a aidé 81 internautes ce mois-ci

Commenter la réponse de yann_lo_san
cs_L0ci 224 Messages postés vendredi 26 novembre 2010Date d'inscription 11 juin 2013 Dernière intervention - 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
Whismeril 11555 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 26 mai 2018 Dernière intervention - 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
yann_lo_san 1137 Messages postés lundi 17 novembre 2003Date d'inscription 23 janvier 2016 Dernière intervention - 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
Woslike 46 Messages postés mercredi 25 juillet 2012Date d'inscription 12 septembre 2013 Dernière intervention - 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
Whismeril 11555 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 26 mai 2018 Dernière intervention - 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
Woslike 46 Messages postés mercredi 25 juillet 2012Date d'inscription 12 septembre 2013 Dernière intervention - 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.