【发布时间】:2016-12-02 11:00:54
【问题描述】:
我完全是 c++ 新手,但我需要向现有 c++ dll 添加一些方法。 该 dll 最初是使用 Visual Studio 2008 构建的,可在 Windows 7 和 Windows XP 上运行。 在我添加我的方法并再次构建 dll 后,它仍然可以在 Windows 7 上运行,但不能在 XP 上运行。 我从 Java 调用 dll 并得到以下异常:
在搜索了一下之后,我发现了 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 上运行此程序的任何帮助将不胜感激。 非常感谢!
【问题讨论】:
-
这与在 Windows 7 上构建无关,这是因为您使用 VS2015 和标准工具集进行构建,该工具集创建了不能在 XP 上运行的可执行文件。您需要 v140_xp 工具集,例如stackoverflow.com/questions/35492695/…
-
我确实做到了,我的平台工具集设置为 Visual Studio 2015 - Windows XP (v140_xp)
标签: c++ dll visual-studio-2015 windows-7 windows-xp