У меня есть следующее минимальное приложение, скомпилированное с конфигурацией 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 — это динамический образ библиотеки x86, который зависит от iphlpapi.dll.
Когда я запускаю эту программу под Windows 2003 R2 x64 SP2, я получаю вывод «Failed with error error = 193» (193 is ERROR_BAD_EXE_FORMAT) и системное сообщение с сообщением, что iphlpapi.dll не найден.
Монитор процессов показывает, что iphlpapi.dll был найден в папке System32.
Когда я запускаю тот же исполняемый файл (и mymodule.dll также то же самое) под Windows 7 x64 SP1, я получаю вывод «Успешно», и Process Monitor показывает, что iphlpapi.dll был найден в SysWOW64 и успешно найден.
Почему поведение отличается на этих двух x64 ОС?
Задача ещё не решена.
Других решений пока нет …