[C++]Créer une form dans une DLL.

    Publicités

Users Who Are Viewing This Thread (Total: 0, Members: 0, Guests: 0)

Nayres

Membre Banni
Apr 15, 2012
3,431
0
341
Quelque part.
Bonjour, je voyais que la section programmation ne bougeait pas beaucoup ces temps-ci, donc je me suis décider de partager avec vous quelques connaissances :

Dans ce tutoriel, je vais utiliser VC++ donc, pour un meilleur suivis du tutoriel, je vous conseille de l'use.

Bon, pour créer un nouveau projet :
VC++>Fichier>Nouveau Projet>Projet Win32>Suivant>Cochez sur 'DLL' et sur Projet Vide>Terminer.

Voilà on a crée notre projet vous verrez 4 fichier comme ceci :


226611Sanstitre.png


Bon maintenant on va crée notre fichier source.
Clique Droit sur fichiers source>Ajouter>Nouvel élement>Fichier .cpp puis nommez le Main.cpp.

C'est là qu'on va mettre notre code :


PHP:
#include <windows.h>
extern int Main(); // On informe notre IDE que la fonction Main est quelque part dans notre projet

void WINAPI MainThread( )
{
    //Cette fonction va démarrer une fois la DLL injecté.//
    Main(); //Ceci va charger notre form et l'afficher.  
}

BOOL WINAPI DllMain ( HMODULE hModule, DWORD dwReason, LPVOID lpvReserved )
{
    switch ( dwReason ) {
        case DLL_PROCESS_ATTACH:

            DisableThreadLibraryCalls(hModule);
// On va créer le Thread de notre form dans l'application où on a injecté la DLL.//
            if ( CreateThread(NULL, 0,  (LPTHREAD_START_ROUTINE)MainThread, NULL, 0, NULL) == NULL ) 
// Si notre Thread est crée
           {
                return FALSE;
            }
            break;
            
        case DLL_PROCESS_DETACH:
            break;

        case DLL_THREAD_ATTACH:
            break;

        case DLL_THREAD_DETACH:
            break;
    }
    return TRUE;
}


Maitenant finis notre Main, on passe à la form, donc pour la créer:

Clique droit sur Fichier d'en-tête>Ajouter>Nouvel élément>UI>Windows Form nommez la Form ou ce que vous voulez.

Vous aurez un message de VS qui dit : Vous ajoutez un composant CLR ...

Vous cliquez sur Oui.

Si on ignore cette information on aura plutard quelque error non relatifs au code source, donc pour éviter ceci allez dans :

Projet>Propriété de 'nom de projet'>Propriété de configuration>Général>paramètre par défaut du projet>Prise en charge du common Langage Run> Vous modifiez Pas de prise en charge à Prise en charge du common Langage Run (/clr)


Tout d'abord, glissez 'Form1.cpp' dans les fichiers sources.


Collez ceci apres #include "Form1.h" Ou ça dépend du nom de votre form

PHP:
using namespace Tutoriel; 
 //Modifiez Tutoriel par le nom de votre projet 

[STAThreadAttribute]

int Main()
{
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 

    //Crée votre Main et le lance.
    Application::Run(gcnew Form1()); 
//Modifiez Form1 par le nom que vous avez donné à votre Form

    return 0;
}

Remplacez Debug par Release pour éviter les bug de MSVCR et MSVCP, puis lancez le débugger tout en ignorant les avertissements.

Voilà c'est tout pour aujourd'hui et à bientôt pour un nouveau tutoriel :D
 
Last edited:
Aug 30, 2013
884
0
922
Salut, d'abord merci a toi Akius, j'ai enfin réussi a créer une dll mais j'ai un autre problème par rapport au dll donc si tu pouvais m'aider sa serais sympas. Envoie moi ton skype par MP si possible. Merci a toi.