[C/win32] compilation DLL VS 2015 vs Code::blocks
Bonjour à tous,
J'ai un problème à s'arracher les cheveux. Voici du code qui compose ma dll (de test) :
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
|
#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;
} |
main.h
Code:
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 |
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 complet de l'application:
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
|
#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.