2016-07-28 1 views
-1

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

CLI exception Après la recherche autour de SO un peu j'ai trouvé Dependency Walker qui me montre ceci:

Dependency Walker

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!

+0

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

+0

Je l'ai fait en fait, ma plate-forme d'outils est définie sur _Visual Studio 2015 - Windows XP (v140_xp) _ – mammago

Répondre

2

J'ai également rencontré des problèmes similaires dans le passé, ces outils _xp jamais travaillé. Téléchargez et installez Visual Studio 2010 (LINK). Ensuite, exécutez votre Visual Studio 2015 et aller aux options du compilateur, vous devriez avoir là un nouvel ensemble d'outils - VS100. Compilez votre bibliothèque avec ça et ça devrait marcher.

+0

Merci pour votre réponse, je vais essayer :) – mammago