Intégrer ma DLL dans mon EXE

Résolu
Woslike Messages postés 46 Date d'inscription mercredi 25 juillet 2012 Statut Membre Dernière intervention 12 septembre 2013 - 6 févr. 2013 à 16:26
Woslike Messages postés 46 Date d'inscription mercredi 25 juillet 2012 Statut Membre 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)

7 réponses

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 24
14 févr. 2013 à 21:07
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...
4
Rejoignez-nous