Bonjour à tous,
J'ai un problème à s'arracher les cheveux. Voici du code qui compose ma dll (de test) :
Dll.cpp :
main.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 #include <Windows.h> #include "main.h" BOOL DLL_EXPORT Exe(int i){ int a = i; return TRUE; } BOOL APIENTRY DllMain( HMODULE 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; }
Je compile ce code sous VS 2015 community avec aussi un programme de test qui fait tout bêtement un LoadLibraryEx("Dll.dll",NULL,0);
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 #define BUILD_DLL #ifdef BUILD_DLL #define DLL_EXPORT __declspec(dllexport) #else #define DLL_EXPORT __declspec(dllimport) #endif #ifdef __cplusplus extern "C" { #endif BOOL DLL_EXPORT Exe(int i); #ifdef __cplusplus } #endif
code complet de l'application:
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 #include <Windows.h> #include <stdio.h> int main(int argc, char* argv[]) { HMODULE hmodule; hmodule = LoadLibraryEx("Dll.dll", NULL, 0); if (hmodule == NULL) { printf("Fail : %d", GetLastError()); } else printf("Loaded"); int i; scanf("%d", &i); return 0; }
Test sous windows 8.1 : le résultat est bien loaded, pas de soucis.
Test sous une VM windows 10 : Erreur code 126 (module could not be found).
Le même code, compilé sous Code::blocks dernière version (GCC)
Test sous 8.1 : tout roule le résultat est loaded
Test sous windows 10 : tout roule , c'est aussi loaded
O_o
Heeeeeeelp Du coup je m'oriente vers une différence d'option de compilation mais pour le moment je n'ai rien. Une idée ? je deviens fou.
Pour info sous VS pour virer toutes dépendances à des fichiers quelconques , je compile avec les options suivantes :
- Pas de precompiled header
- Multi thread Dll
- Multi bytes char set
- Use standard windows library
- platform toolset : Visual Studio 2015 - Windows XP (v140_xp)
Les options sous code::blocks sont celles par défault
(je n'ai pas touché aux autres options).
Merci d'avance pour vos idées.
Partager