Dll [Résolu]

Signaler
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010
-
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010
-
Salut a tous,

Je code en vb6, et j'aimerai me faire une dll en C++ pour l'appeler depuis un soft vb6 comme on fait appel a une api Windows

Cette dll doit contenir une procedure qui lance un processus dont le fichier est passe en argument...

J'utilise DevC++ merci d'avance pour votre aide

++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...

8 réponses

Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Met ce code dans un fichier .cpp

#include <windows.h>

BOOL WINAPI DllMain(HINSTANCE, DWORD, LPVOID)
{
    return TRUE;
}

VOID __declspec(dllexport) LaunchProcess(char* szProcessName)
{
    //Mettre içi le code pour lancer le processus, je ne me souviens plus de la syntaxe exacte de la fonction CreateProcess...
}
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
C'est que ta fonction est exporté en C++ et tu doit probablement l'appeler en C donc essais de déclarer ta fonction comme ceci:

extern "C" VOID __declspec(dllexport) LaunchProcess(char* szProcessName)

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
Essaie extern "C" VOID __declspec(dllexport) WINAPI LaunchProcess(char* szProcessName)
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

Salut nightLord666,

Merci, ca me donne donc ceci:

#include <windows.h>
BOOL WINAPI DllMain(HINSTANCE, DWORD, LPVOID)
{
    return TRUE;
}



VOID __declspec(dllexport) LaunchProcess(char* szProcessName)
{
  


STARTUPINFO         siStartupInfo;
PROCESS_INFORMATION piProcessInfo;



memset(&siStartupInfo, 0, sizeof(siStartupInfo));
memset(&piProcessInfo, 0, sizeof(piProcessInfo));
siStartupInfo.cb = sizeof(siStartupInfo);
if(CreateProcess(NULL,szProcessName,0,0,FALSE,
                     CREATE_DEFAULT_ERROR_MODE,0,0,                             
                     &siStartupInfo,&piProcessInfo) == FALSE)
{
// erreur
}


Est-ce que c'est bien juste ?
Si oui j'ai pas trop bien compris ou le mettre, je cree un nouveau projet dll, et il me cree un fichier dllmain + un fichier dll.h si j'ajoute ce code au projet et que je compile, tout ce passe bien, mais lorsque j'essai d'appeler la fonction, je recois l'erreur "cant file entry point in dll..."

Encore mrci
++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
Messages postés
746
Date d'inscription
vendredi 17 juin 2005
Statut
Membre
Dernière intervention
23 mai 2007
9
A la limite, moi je n'aurais pas créé une DLL pour ça : j'aurais directement importé CreateProcess de kernel32.dll dans le programme VB, et j'aurais utilisé la fonction CreateProcess directement dans le code VB.
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

Re,

Merci SAKingdom, ca marche ^^ mais je recois un bad dll convention apres l'execution du processus :( 

nightLord666 > Eh oui evidament, ce serait bien plus simple, mais ici CreateProcess est un exemple, pour bien comprendre comment faire, le but est de creer une dll que je puisse faire utiliser a un autre processus, via CreateRemonteThread, et vb6 ne permet pas de faire de dll :(

Merci beaucoup
++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
ichhh c'est risqué car il risque de ne plus pouvoir appeller ses fonctions correctement encore une fois.

___________________________________________
Les plus grands esprits trouvent toujours une solution
Messages postés
625
Date d'inscription
vendredi 23 avril 2004
Statut
Membre
Dernière intervention
25 novembre 2010

re,

Eh apparement ca marche impec maintenant :)

je vais voir si ca marche via CreateRemoteThread...

encore merci a tous les deux vous m'avez vraiment bien aide :)

++

Quand on pose une question on est con 5 minutes,
Quand on ne la pose pas on le reste toute sa vie...