IActiveScript и модули.
От: OlegMB  
Дата: 11.01.23 13:28
Оценка:
Всем привет!

Пытаюсь к основному скрипту (VBS) подключить другой в виде модуля.
Для этого вызываю IActiveScript::AddNamedItem() с флагом SCRIPTITEM_CODEONLY.
Сначала добавляю модуль:
rc = pScript->AddNamedItem(L"Mod1", SCRIPTITEM_ISVISIBLE | SCRIPTITEM_CODEONLY);
rc = pParse->ParseScriptText(pszSrc, L"Mod1", NULL, NULL, 0, 0, SCRIPTTEXT_ISVISIBLE, NULL, &e);

Потом добавляю основной скрипт. Перевожу в состояние Connected.
rc = pParse->ParseScriptText(pszSrc, NULL, NULL, NULL, 0, 0, SCRIPTTEXT_ISVISIBLE, NULL, &e);

Затем получаю информацию об основном модуле:
rc = pScript->GetScriptDispatch(NULL, &pDisp);
rc = pDisp->GetTypeInfo(0, LOCALE_SYSTEM_DEFAULT, &pType);


При вызове последней строки прилетает вызов GetItemInfo для "Mod1". Согласно доке, у "сайта" нет ничего для этого модуля и он должен в качестве интерфейса вернуть NULL. Но скриптовый движок так не считает и использует NULL как живой интерфейс с предсказуемым итогом. При выполнении скрипта история с GetItemInfo повторяется.

Если вместо NULL вернуть IDispatch модуля, то все работает. Но это противоречит доке...

Может кто знает, в чем подвох?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.