Je dois ouvrir un fichier d'aide html à partir d'une ancienne application Windows écrite dans l'ancienne version de C++ Builder. HtmlHelp est chargé via HtmlHelp.ocx, que je charge via LoadLibrary.La bibliothèque LoadLibrary sur le fichier OCX échoue sous Windows 7 x64
Cela a fonctionné correctement pendant des années, mais cela ne fonctionne plus sous Windows 7 x64. Il peut également échouer sous Windows7 x86, mais je n'ai pas d'ordinateur avec ce système d'exploitation, donc je ne peux pas l'essayer pour le moment.
Je chargeais hhctrl.ocx dynamiquement comme suit:
#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;
}
j'ai vérifié si% SystemRoot% \ System32 \ hhctrl.ocx existe sur le système Windows 7 et il le fait.
Pourquoi le chargement via LoadLibrary échoue-t-il? Comment puis-je contourner ce problème?
EDIT: GetLastError dit (en allemand, donc je ne fais que traduire): "Impossible de trouver le fichier." Mais j'ai débogué la fonction et le chemin est "% SystemRoot% \ System32 \ hhctrl.ocx" et le fichier existe. En outre, étant donné que deux réponses pointent vers des problèmes 64 bits vs 32 bits: Mon application est un exécutable 32 bits compilé dans C++ Builder 5, il devrait donc s'agir d'un processus 32 bits si je ne me trompe pas . Ou ai-je tort de supposer cela?
Que disent GetLastError et FileMon? –
Bon point. Voir première modification ci-dessus. –