begin process at 2012 05 29 11:07:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Systeme

 > 

Dll + LoadLibrary


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Dll + LoadLibrary

mardi 23 septembre 2003 à 12:27:06 | Dll + LoadLibrary

Manson

Salut,

voila, j'ai fais une dll dont le code est le suivant :

void __declspec(dllexport)show_msg(HWND hWnd, char *msg)
{
MessageBox(hWnd, msg, "Dll Powa - Yeah !", MB_OK);
}

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

La compilation se fait tres bien. Dans mon programme maintenant je fais ceci :

typedef void (*MYPROC)(HWND hWnd, char *msg);
HMODULE dll;
MYPROC show_msg;

dll = LoadLibrary("test_dll.dll");
if (dll == NULL)
MessageBox(NULL, "Can't load library", "Error", MB_OK);
else
{
show_msg = (MYPROC)GetProcAddress(dll, "show_msg");
if (show_msg == NULL)
{
error = GetLastError();
sprintf(msg, "Error code : %lu", error);
MessageBox(NULL, msg, "Error", MB_OK);
}
else
(show_msg)(hWnd, "Ceci est un test :)");
FreeLibrary(dll);
}

J'ai toujours le code 127 comme erreure. Je ne comprend pas pourquoi.

Si vous trouvez l'erreure ou que vous avez un conseil.

D'avance merci.

Rno
mardi 23 septembre 2003 à 12:39:38 | Re : Dll + LoadLibrary

Nebula

Membre Club
C'est quoi au juste, ce code 127 ?

Essaie plutot :

typedef void WINAPI (MYPROC)(HWND,char*)


Pour définir le type de ta procédure.

A+
mardi 23 septembre 2003 à 12:47:21 | Re : Dll + LoadLibrary

Nebula

Membre Club
Je viens de compiler et d'exécuter ton code sans aucun problème, et sans rien modifier. Peux tu m'en dire plus ?

PS: ne tiens pas compte de la remarque précédente, c'est juste que je ne gère pas les pointeurs de fonctions de la même manière que toi.
mardi 23 septembre 2003 à 13:04:01 | Re : Dll + LoadLibrary

aardman

Membre Club
Salut,
Pour info si ca peut vous aider:
Erreur 127: " La procédure spécifiée est introuvable. "
mardi 23 septembre 2003 à 13:11:56 | Re : Dll + LoadLibrary

Nebula

Membre Club
Ah...

C'est donc que le compilateur a "décoré" le nom de la procédure dans la DLL avec des underscores ou un @xxx

Dumpe les exports de ta DLL et regarde si tu vois un nom comme _show_msg ou __show_msg ou show_msg@xxx (je suppose que ce sera show_msg@8, vu le type des paramètres de show_msg).

Quel compilateur utilises tu ? Il y a surement moyen de désactiver cela. Pour GCC, teste :

gcc -Wall -W toto_dll.c -mdll -o toto.dll -Wl,--kill-at


Pour MSVC, je sais pas.

A+
mardi 23 septembre 2003 à 13:16:10 | Re : Dll + LoadLibrary

BruNews

Administrateur CodeS-SourceS
extern "C" void __stdcall show_msg(HWND hWnd, char *msg)
{
code ici de la dll;
}

FICHIER nomdll.def a inclure dans projet:
LIBRARY nomDll
EXPORTS
show_msg

Devrait aller mieux, le nom ne sera plus decore.
Et mets bien __stdcall dans la declaration du prog appelant.
BruNews, ciao...
mardi 23 septembre 2003 à 13:53:58 | Re : Dll + LoadLibrary

Manson

Euh ... j'ai fais tout ce que vous avez dit, mais ca ne marche toujours pas.

J'ai fais le fichier test_dll.def, mais rien. Ca ne marche toujours pas j'ai le code 127.

Je compile avec .NET.

Voici mon code apres les modifs pour la DLL :

extern "C" void __stdcall show_msg(HWND hWnd, char *msg)
{
MessageBox(hWnd, msg, "Dll Powa - Yeah !", MB_OK);
}

BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}

avec le fichier def :

LIBRARY test_dll
EXPORTS
show_msg

et le code du prog appelant :

typedef void (__stdcall *MYPROC)(HWND hWnd, char *msg);
HMODULE dll;
MYPROC show_msg;
[...]
dll = LoadLibrary("test_dll.dll");
if (dll == NULL)
MessageBox(NULL, "Can't load library", "Error", MB_OK);
else
{
show_msg = (MYPROC)GetProcAddress(dll, "test_bordel_de_merde");
if (show_msg == NULL)
{
error = GetLastError();
sprintf(msg, "Error code : %lu", error);
MessageBox(NULL, msg, "Error", MB_OK);
}
else
(show_msg)(hWnd, "Ceci est un test :)");
FreeLibrary(dll);
}
mardi 23 septembre 2003 à 13:58:19 | Re : Dll + LoadLibrary

Nebula

Membre Club

show_msg = (MYPROC)GetProcAddress(dll, "test_bordel_de_merde");


Normal...
mardi 23 septembre 2003 à 13:58:28 | Re : Dll + LoadLibrary

BruNews

Administrateur CodeS-SourceS
show_msg = (MYPROC)GetProcAddress(dll, "show_msg");
BruNews, ciao...
mardi 23 septembre 2003 à 13:59:51 | Re : Dll + LoadLibrary

Manson


[..]
show_msg = (MYPROC)GetProcAddress(dll, "test_bordel_de_merde");
if (show_msg == NULL)
[...]


C'est pas le bon nom de fonction (j'etais un peu enerve
que ca marche pas.) Maintenant ca marche nickel.

Grand merci a tous.

Rno

1 2

Cette discussion est classée dans : dll, show, hwnd, msg, error


Répondre à ce message

Sujets en rapport avec ce message

Prob WIN32 [ par AngeloVivaldi ] bonjour, voici un code ke g tapé pour mon apprentissage de la prog Graphique :#include LRESULT CALLBACK WinProc(HWND hWnd, UINT uMsg, WPARAM wParam, L WIN32 Dev-cpp: Le bouton refuse d'afficher le bitmap [ par gekkko ] Bonjour!Je n'arrive pas à faire afficher un bitmap sur un bouton CreateWindow.Le bitmap se charge pourtant bien puisque le .EXE grossit.La compilation bmp dans static [ par Arnaud16022 ] bonjourvoila je veux mettre un bmp dans un static.dans le fichier rc ya:SniperImg BITMAP "C:/sniper.bmp"et dans le main ya (en simplifie)#include LRES Erreurss dans la compilation d'une DLL [ par Mastersam ] Bonjour je suis en train de créer une dll pour une interface usb-série ftdi323c (qui est utilisée dans une interface DMX).J'ai donc les pilotes de cet Utilisation de Xenroll.dll [ par Acouel ] Bonjour, je suis en première année d'école d'ingé et actuellement en stage. Voici mon pb : je tente de réaliser un programme pour réaliser une demande Probleme d affichage [ par Scythale ] Lorsque j'execute ce programme voici ce que dit mon compilateur(borland C++): you have accidentely use the old dummy version of OwlMain.Je n'arrive pa crer "dialog non modal" [ par comfm ] BonjourJe n'arrive pas à créer une boite de dialogue non modal, c'est à dire celle qui permet d'être tjs affichée et on peut cliquer derriere sans pro Communications exe / dll [ par Nebula ] Re-bonjour ...J'utilise ce code dans une dll :#define WIN32_LEAN_AND_MEAN#include HWND hApp = NULL;LRESULT CALLBACK Portée des variables avec MFC : HELP !!! [ par sprintjeffC ] salut,j'ai commençé à coder pour la 1ere fois en C et MFC avec devc++ ... c cool. Petit problème toute fois : j'ai une main (spéciale en MFC) et une p [Visual C++] Probleme de link d une dll avec code C et C++ [ par nebucad ] Bonjour tout le mondeJe suis sur un problème depuis quelques jours et j'en appelle donc à votre âme charitable pour régler ce problème que je rencontr


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,357 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales