我有以下使用 x86 配置编译的最小应用程序来说明我的问题:
int _tmain(int argc, _TCHAR* argv[])
{
LPVOID oldValue = NULL;
BOOL result = ::Wow64DisableWow64FsRedirection(&oldValue);
_ASSERTE(result);
HMODULE moduleHandle = ::LoadLibrary(L".\\mymodule.dll");
if (moduleHandle != NULL)
{
std::wcout << L"Succeeded";
}
else
{
DWORD errorCode = ::GetLastError();
std::wcout << L"Failed with error code = " << errorCode;
}
return 0;
}
mymodule.dll 是依赖于 iphlpapi.dll 的 x86 动态库映像。
当我在 Windows 2003 R2 x64 SP2 下运行此程序时,我得到输出“失败,错误代码 = 193”(193 是 ERROR_BAD_EXE_FORMAT)和系统消息框,其中显示找不到 iphlpapi.dll 的消息。Process Monitor 显示在 System32 文件夹下搜索到 iphlpapi.dll。
当我在 Windows 7 x64 SP1 下运行相同的可执行文件(mymodule.dll 也相同)时,我得到输出“Succeeded”,并且进程监视器显示 iphlpapi.dll 在 SysWOW64 下被搜索并成功找到。
为什么这两个 x64 操作系统的行为不同?