Programation dll

Fermé
comi512 - 29 août 2009 à 10:05
 comi512 - 30 août 2009 à 12:58
Bonjour,

Je voudrais savoir comment programmer en c++ une dll sous Dec-C++ et comment l'appeler d'un autres programme , j'ai beau regarder dans les forum et je ne trouve pas d'exemple concret et qui marche .

J'ai trouver une facon qui pourrais marchez mais Vista me renvoi un message d'erreur en me disant que mon application a cesser de fonctionner .

voila mon code source de la dll:

#include <windows.h>

BOOL APIENTRY DllMain (HINSTANCE hInst /* Library instance handle. */ ,
DWORD reason /* Reason this function is being called. */ ,
LPVOID reserved /* Not used. */ )
{
switch (reason)
{
case DLL_PROCESS_ATTACH:
break;

case DLL_PROCESS_DETACH:
break;

case DLL_THREAD_ATTACH:
break;

case DLL_THREAD_DETACH:
break;
}

/* Returns TRUE on success, FALSE on failure */
return TRUE;
}

int __stdcall FunMsgBox( HWND mWnd, HWND aWnd, char *data, char *parms, BOOL print, BOOL nopause )
{
int MsgBox;

MsgBox = MessageBox(NULL, "Vous avez une erreur , \nc'est tout pour le moment...", "ERROR...", MB_ICONERROR | MB_YESNO );

if(MsgBox == IDYES)
{
return 0;
}
else(MsgBox == IDNO)
;{
return 2;
}

return 1;
}

et la voila mon code pour appeler ma dll :
fichier main.cpp :

#include <cstdlib>
#include <iostream>
#include "windows.h"
#include "toto.h"

using namespace std;

int main(int argc, char *argv[])
{
HMODULE hDll = LoadLibrary( "G:\\project_DLLCC\\DLLCC.dll" );


typedef void (WINAPI * DLL_Function_MsgBox) ();
DLL_Function_MsgBox pFuncMessage;

pFuncMessage = (DLL_Function_MsgBox) GetProcAddress( hDll, "Message" );


pFuncMessage();

FreeLibrary(hDll);

system("PAUSE");
return EXIT_SUCCESS;
}

fichier toto.h :

#ifndef XC_DLLCC_H
#define XC_DLLCC_H

#if defined (__cplusplus)
extern "C" {
#endif
// déclare un type pour l'extraction de la fonction...
typedef void (WINAPI * DLL_Function_MsgBox) ();

#if defined (__cplusplus)
}
#endif

#endif /* XC_DLLCC_H */


Voila je me suis base sur des forum pour appeler et créer ma dll , mais sa ne marche pas alors es que quelqu'un pourrait il m'aider en me fournissant un exemple concret .

merci d'avance pour vos réponses .

comi512

PS: Se n'est pas mon ordi mais mon OS est vista

2 réponses

Bonjour

Dans ton programme pour tester la dll, tu cherches une fonction qui s'appelle Message.
Or, dans la dll, il me semble qu'elle s'appelle FunMsgBox.

D'autre part, dans le programme principal, tu ne testes pas les valeurs renvoyées par LoadLibrary et GetProcAddress. L'idéal pour faire planter un PC
0
bonjour,

D'accord es que vous pouvez me donner un exemple qui marche pour que je puisse essaye chez moi ?
Car je ne suis pas expert je débute j'ai quelque base c'est tout donc si vous pouviez me donner un exemple concret se serait cool .

merci d'avance .

comi512
0