Есть ли способ контролировать порядок каталогов для LoadTypeLibEx, аналогичный LoadLibraryEx?

#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/… поэтому он будет использовать не пути, а реестр.