З.Ы. IActiveScript::GetScriptDispatch почему-то возвращает nil. Возможно потому, что скрипт создаётся в одном Thread-е, а используется в другом. Если добавить анализ возвращаемого значения - ошибка не возникает, но и скрипт, естесственно, не вызывается
procedure THIVBJScript._DoWork;
var Disp:IDispatch; dt,idx:TVariantArg;
begin
if FEngine = nil then Exit;
FEngine.GetScriptDispatch(nil, Disp);
if Disp = nil then Exit;