DLL, segmentation fault si paramètre dans fonction
Bonjour,
J'ai un petit souci avec une DLL que j'ai crée (c'est la première que je fais), jusqu'à maintenant elle fonctionnait mais depuis que j'ai voulu ajouté un paramètre à une fonction (le int addr), j'ai un problème(segmentation fault) au bout d'un certain temps...
Voilà le code (adapté)...
Le main :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
#include <iostream>
#include <sstream>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
using namespace std;
int main(int argc, char *argv[]) {
HINSTANCE DLLHandle;
DLLHandle = LoadLibrary("madll.dll");
typedef const char*(*Type_Pointeur_De_Fonction1)(int addr);
Type_Pointeur_De_Fonction1 ded;
ded = (Type_Pointeur_De_Fonction1)GetProcAddress(DLLHandle,"derQueryDLL");
string recuDed;
int i=0;
for(i=0; i<200; i++)
{
cout << "BOUCLE main ----> ";
cout << i << endl;
cout << "----------------------------------------------------------" << endl;
recuDed = ded(255);
cout << "DED main ----> ";
cout << recuDed << endl;
cout << "----------------------------------------------------------" << endl;
}
printf("Appuyez sur une touche pour continuer...");
getchar();
FreeLibrary(DLLHandle);
return 0;
} |
La DLL (.h):
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
|
#ifndef __MAIN_H__
#define __MAIN_H__
#include <windows.h>
#include <iostream>
#include <sstream>
#include <stdio.h>
#include <string>
#include <iomanip>
#ifdef BUILD_DLL
#define DLL_EXPORT __declspec(dllexport) __stdcall
#else
#define DLL_EXPORT __declspec(dllimport) __stdcall
#endif
#ifdef __cplusplus
extern "C"
{
#endif
/*=============================================================================
Fonctions exporter de la bibliothèque
=============================================================================*/
const char* DLL_EXPORT derQueryDLL(int addr);
#ifdef __cplusplus
}
#endif
#endif // __MAIN_H__ |
La DLL (.cpp) :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
|
#include "main.h"
using namespace std;
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
// attach to process
// return FALSE to fail DLL load
break;
case DLL_PROCESS_DETACH:
// detach from process
break;
case DLL_THREAD_ATTACH:
// attach to thread
break;
case DLL_THREAD_DETACH:
// detach from thread
break;
}
return TRUE; // successful
}
const char* derQueryDLL(int addr)
{
string result;
string strAddr;
result.assign("");
const char* result_p = NULL;
int address(addr);
//Conversion des int en string (sur 2 caractères, représentation hexadécimal ):
ostringstream oss;
oss << hex << setw(2) << setfill('0') << address;
strAddr = oss.str();
Sleep(50);
//result = bdg.derQuery(strAddr);
result = "07";
result_p = result.c_str();
return result_p;
} |
Voilà au bout de 20 tours de boucle ça crash ! :cry:
Si j'enlève le paramètre (int addr), plus de soucis...