Как я возвращаю массив строк от объекта ActiveX до JScript

#work~
`
a = ['Openstack','Puppet','Python']
b = {}
c = 0
for v in a:
    b[v] = c
    c+=1
print b

`

5
задан ɢʀᴜɴᴛ 25 June 2017 в 09:36
поделиться

2 ответа

Если я вспомню правильно, то необходимо будет перенестись SAFEARRAY в a VARIANT для него, чтобы пройти, и затем использовать VBArray возражают для распаковки его на стороне JS вещей:

HRESULT GetArrayOfStrings(/*[out, retval]*/ VARIANT* pvarBstrStringArray)
{
   // ...

   _variant_t ret;
   ret.vt = VT_ARRAY|VT_VARIANT;
   ret.parray = rgBstrStringArray;
   *pvarBstrStringArray = ret.Detach();
   return S_OK;
}

затем

var jsFriendlyStrings = new VBArray( axOb.GetArrayOfStrings() ).toArray();
6
ответ дан 14 December 2019 в 09:05
поделиться

Shog9 корректен. Сценарии COM требуют, чтобы всеми выводами были ВАРИАНТЫ.

На самом деле это также требует, чтобы всеми ИСХОДНЫМИ ДАННЫМИ были ВАРИАНТЫ также - посмотрите противные детали IDispatch в Вашем любимом справочном файле. Это только думало волшебство о Двойной Интерфейсной реализации ATL и подобными слоями (который, скорее всего, является тем, что Вы используете), что Вы не должны волноваться об этом. Входные ВАРИАНТЫ, переданные кодом вызова, преобразовываются для соответствия сигнатуре метода, прежде чем фактический метод назовут.

1
ответ дан 14 December 2019 в 09:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: