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 :
La DLL (.h):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 (.cpp) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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__
Voilà au bout de 20 tours de boucle ça crash !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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; }
Si j'enlève le paramètre (int addr), plus de soucis...
Partager