当使用 Windows 7 构建时,C++ DLL 在 Windows XP 上不是 运行

C++ DLL Not running on Windows XP when built with Windows 7

我是 c++ 的新手,但我需要向现有的 c++ dll 添加一些方法。 该 dll 最初是用 Visual Studio 2008 构建的,它适用于 Windows 7 和 Windows XP。 在我添加我的方法并再次构建 dll 之后,它仍然可以在 Windows 7 上运行,但不能在 XP 上运行。 我从 Java 调用 dll 并得到以下异常:

在 SO 上搜索了一下之后,我找到了 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 上获得此 运行 的任何帮助,我们将不胜感激。 非常感谢!

我过去也 运行 遇到过类似的问题,那些 _xp 工具集从来没有用过。下载并安装 Visual Studio 2010 (LINK)。 然后 运行 你的 Visual Studio 2015 并转到编译器选项,你应该有一个新的工具集 - vs100。用它编译你的库,它应该可以工作。