Вызов Win32 API RegisterTypeLib () используется для создания ключей реестра, необходимых для регистрации библиотеки типов.
К сожалению, в Windows XP он пытается записать эти записи ключа реестра в
HKEY_CLASSES_ROOT\TypeLib
вместо
HKEY_CURRENT_USER\Software\Classes\TypeLib
Это означает, что обычный пользователь не сможет запустить ActiveX.
В мае 2008 года Microsoft выпустила исправление для Vista , чтобы исправить эту проблему - но проблема остается в Windows XP.
Что делать стандартному дружественному разработчику?
Ответ 1
Используйте специально разработанный для этого вызов API:
RegisterTypeLibraryForUser ()
Ответ 2
Если вы не можете это исправить, взломайте это:
//begin hack
HKEY key;
RegOpenKeyW(HKEY_CURRENT_USER, @"Software\Classes", out key);
RegOverridePredefKey(HKEY_CLASSES_ROOT, key);
//do original work
RegisterTypeLibrary(...)
//stop hacking
RegOverridePredefKey(HKEY_CLASSES_ROOT, null);
RegCloseKey(key);