#windows #winapi
Вопрос:
У меня есть следующая проблема. В своей программе я вызываю LoadTypeLibEx с полным путем:
ITypeLib* m_pTypeLib = nullptr;
LoadTypeLibEx(L"C:\exepath\MyLib.tlb", REGKIND_NONE, amp;m_pTypeLib);
Но если я запущу exe-файл из другого каталога, «C:otherdir» с помощью ярлыка, и я копирую MyLib.tlb в C:otherdir, затем Procmon показывает мне, что LoadTypeLibEx
загружает MyLib.tlb из «C:otherdir» даже несмотря на то, что я даю полный явный путь «C:exepathMyLib.tlb».
Кто-нибудь еще сталкивался с этой проблемой?
Комментарии:
1. Система хранит таблицы типов в кэше. Вы уверены, что он не был загружен до того, как вы позвонили в LoadTypeLibEx
2. После переноса кода в минимальный образец я понял, что проблема на самом деле возникла из-за вызова
IActiveScript::AddTypeLib
, а не изLoadTypeLibEx
-за него . Но библиотека типов уже должна быть кэширована, не так ли?3. Я подозреваю, что LoadTypeLibEx не касается кэша (ни для поиска, ни для хранения). Обычно я использую RegisterTypeLibForUser для типов, которые я собираюсь передать в ActiveScript.
4. IActiveScript::AddTypeLib вызовет LoadRegTypeLib docs.microsoft.com/en-us/windows/win32/api/oleauto/… поэтому он будет использовать не пути, а реестр.