2016-07-28 192 views
-1

我是一個全新的C++,但我需要添加一些方法到現有的C++ DLL。 該DLL最初是用Visual Studio 2008構建的,它可以在Windows 7和Windows XP上運行。 在我添加了我的方法並重新構建了dll之後,它仍然可以在Windows 7上運行,但不能在XP上運行。 我從Java調用的dll,並得到以下異常:C + + DLL在Windows 7中生成時不在Windows XP上運行

CLI exception 上SO有點,我發現的Dependency Walker周圍搜索後,這表明我:

編制

Dependency Walker

的命令行選項是

/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"

而且連接器的命令是

/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

我添加方法是這些:

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; 
} 

任何幫助,讓這個在XP上運行將高度讚賞。 非常感謝提前!

+0

這與建立在Windows 7上沒有任何關係,這是因爲您使用VS2015構建標準工具集,該工具集會創建不在XP上運行的可執行文件。您需要v140_xp工具集,例如http://stackoverflow.com/questions/35492695/when-should-i-use-vs2015-platform-toolset-v140-xp – stijn

+0

我實際上做到了,我的平臺工具集設置爲_Visual Studio 2015 - Windows XP(v140_xp) _ – mammago

回答

2

我也遇到過類似的問題,那些_xp工具集從來沒有工作過。下載並安裝Visual Studio 2010(LINK)。 然後運行你的Visual Studio 2015並轉到編譯器選項,你應該有一個新的工具集 - vs100。編譯你的庫,它應該工作。

+0

感謝您的回答,我會試試:) – mammago

相關問題