Je suis totalement novice en C++ mais j'avais besoin d'ajouter des méthodes à une DLL C++ existante. La DLL a été initialement créée avec Visual Studio 2008 et a fonctionné sous Windows 7 et Windows XP. Après avoir ajouté mes méthodes et construit la dll à nouveau, il fonctionnait toujours sur Windows 7 mais pas sur XP. j'appelle les dll de Java et obtenir l'exception suivante:C++ DLL Ne fonctionne pas sous Windows XP avec Windows 7
Après la recherche autour de SO un peu j'ai trouvé Dependency Walker qui me montre ceci:
Les options de ligne de commande pour la compilation sont
/GS /analyze- /W3 /Gy /Zc:wchar_t /Zi /Gm- /O2 /Ob1 /Fd".\Release/" /Zc:inline /fp:precise /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_USRDLL" /D "NTPROCESSDLL_EXPORTS" /D "_VC80_UPGRADE=0x0600" /D "_USING_V110_SDK71_" /D "_WINDLL" /D "_MBCS" /errorReport:prompt /GF /WX- /Zc:forScope /Gd /Oy- /MT /Fa".\Release/" /EHsc /nologo /Fo".\Release/" /Fp".\Release/NTProcessDLL.pch"
Et la commande de liaison est
/OUT:".\Release\NTProcessDLL.dll" /MANIFEST /PDB:".\Release/NTProcessDLL.pdb" /DYNAMICBASE:NO "pdh.lib" /DEF:".\NTProcessDLL.def" /IMPLIB:".\Release/NTProcessDLL.lib" /DEBUG /DLL /MACHINE:X86 /SAFESEH /INCREMENTAL:NO /PGD:".\Release\NTProcessDLL.pgd" /MANIFESTUAC:"level='asInvoker' uiAccess='false'" /ManifestFile:".\Release\NTProcessDLL.dll.intermediate.manifest" /ERRORREPORT:PROMPT /NOLOGO /TLBID:1
Et les méthodes que j'ai ajoutées sont les suivantes:
void _minimizeProcess(long nPid)
{
EnumWindows(EnumWindowsProcMinimize, nPid);
}
BOOL CALLBACK EnumWindowsProcMinimize(HWND hwnd, LPARAM lParam)
{
HWND g_HWND = NULL;
DWORD lpdwProcessId;
GetWindowThreadProcessId(hwnd, &lpdwProcessId);
if (lpdwProcessId == lParam)
{
g_HWND = hwnd;
ShowWindow(g_HWND, SW_MINIMIZE);
CloseHandle(g_HWND);
Sleep(1);
return FALSE;
}
return TRUE;
}
Toute aide pour obtenir cette course sur XP serait très appréciée. Merci beaucoup d'avance!
Cela n'a rien à voir avec la construction sur Windows 7, c'est parce que vous construisez en utilisant VS2015 avec l'ensemble d'outils standard qui crée des exécutables qui ne fonctionnent pas sous XP. Vous avez besoin de l'ensemble d'outils v140_xp, par exemple. http://stackoverflow.com/questions/35492695/when-should-i-use-vs2015-platform-toolset-v140-xp – stijn
Je l'ai fait en fait, ma plate-forme d'outils est définie sur _Visual Studio 2015 - Windows XP (v140_xp) _ – mammago