Мне нужно открыть HTML-файл справки из старого приложения Windows, написанного в старой версии C ++ Builder. HtmlHelp загружается через HtmlHelp.ocx, который я загружаю через LoadLibrary.
Это хорошо работало в течение многих лет, но больше не работает в Windows 7 x64. Он также может не работать под Windows7 x86, но у меня нет компьютера с этой ОС, поэтому я не могу попробовать его в данный момент.
Я загружаю hhctrl.ocx динамически следующим образом:
#define HHPathRegKey "CLSID\\{adb880a6-d8ff-11cf-9377-00aa003b7a11}\\InprocServer32"
bool THTMLHelper::LoadHtmlHelp()
{
HKEY HHKey;
DWORD PathSize = 255;
char Path[255];
bool R = false;
if (::RegOpenKeyExA(HKEY_CLASSES_ROOT, HHPathRegKey, 0, KEY_QUERY_VALUE, (void **)&HHKey) == ERROR_SUCCESS)
{
if (::RegQueryValueExA(HHKey, "", NULL, NULL, (LPBYTE)Path, &PathSize) == ERROR_SUCCESS)
{
//*****************************************
//LOADING FAILS HERE
//PATH IS %SystemRoot%\System32\hhctrl.ocx
//*****************************************
HHLibrary = ::LoadLibrary(Path);
if (HHLibrary != 0)
{
__HtmlHelp = (HTML_HELP_PROC) ::GetProcAddress(HHLibrary, "HtmlHelpA");
R = (__HtmlHelp != NULL);
if (!R)
{
::FreeLibrary(HHLibrary);
HHLibrary = 0;
}
}
}
::RegCloseKey(HHKey);
}
return R;
}
Я проверил, существует ли% SystemRoot% \ System32 \ hhctrl.ocx в системе Windows 7, и он существует.
Почему при загрузке через LoadLibrary происходит сбой? Как я могу обойти эту проблему?
РЕДАКТИРОВАТЬ: GetLastError говорит (на немецком языке, поэтому я просто переводить): «Не удалось найти файл». Но я отладил функцию, и путь «% SystemRoot% \ System32 \ hhctrl.ocx», и файл существует.
Кроме того, поскольку два ответа указывают в направлении 64-битных и 32-битных проблем: мое приложение представляет собой 32-битный исполняемый файл, скомпилированный в C ++ Builder 5, поэтому это должен быть 32-битный процесс, если я не ошибаюсь. Или я ошибаюсь, предполагая это?