Здравствуйте, у меня такая проблема как передать иассив строк из cpp в JavaScript? Я заполняю SAFEARRAY элеменитами BSTR. А вот как быть дальше я пока не понимаю. Возможно кто-то уже сталкивался с такой проблемой. Заранее спасибо.
Здравствуйте, Victor1, Вы писали:
V>Здравствуйте, у меня такая проблема как передать иассив строк из cpp в JavaScript? Я заполняю SAFEARRAY элеменитами BSTR. А вот как быть дальше я пока не понимаю. Возможно кто-то уже сталкивался с такой проблемой. Заранее спасибо.
Дальше надо создать COM обьект и в методе вернуть массив, и вызвать твой COM обьект в JavaScript-е
Здравствуйте, Tom, Вы писали:
Tom>Здравствуйте, Victor1, Вы писали:
V>>Здравствуйте, у меня такая проблема как передать иассив строк из cpp в JavaScript? Я заполняю SAFEARRAY элеменитами BSTR. А вот как быть дальше я пока не понимаю. Возможно кто-то уже сталкивался с такой проблемой. Заранее спасибо.
Tom>Дальше надо создать COM обьект и в методе вернуть массив, и вызвать твой COM обьект в JavaScript-е
Насчет COM я понял. Нет ли у Вас примера решения подобного вопроса?
Здравствуйте, Victor1, Вы писали:
V>Насчет COM я понял. Нет ли у Вас примера решения подобного вопроса?
Еще учтите, что вы получите не javascript-овый array, а VB safe array. Получить доступ к его элементам можно через объект VBArray, а метод toArray() конвертирует его в стандартный javascript array.
То есть как я понял, я формирую psa, который потом должен вызвать в JavaScripte?. Соответсвенно, в JavaScripte, один из параметров функции должен быть массивом. Так?
Здравствуйте, Victor1, Вы писали:
V>То есть как я понял, я формирую psa, который потом должен вызвать в JavaScripte?. Соответсвенно, в JavaScripte, один из параметров функции должен быть массивом. Так?
Возврашаемый параметр, тот, что [out, retval]. И не массивом, а вариантом с массивом внутри. И еще, не уверен, что можно вернуть VT_ARRAY|VT_BSTR, возможно придется делать VT_ARRAY|VT_VARIANT, и уже варианты будут типа VT_BSTR.
Здравствуйте, George Seryakov, Вы писали:
GS>Здравствуйте, Victor1, Вы писали:
V>>То есть как я понял, я формирую psa, который потом должен вызвать в JavaScripte?. Соответсвенно, в JavaScripte, один из параметров функции должен быть массивом. Так?
GS>Возврашаемый параметр, тот, что [out, retval]. И не массивом, а вариантом с массивом внутри. И еще, не уверен, что можно вернуть VT_ARRAY|VT_BSTR, возможно придется делать VT_ARRAY|VT_VARIANT, и уже варианты будут типа VT_BSTR.
Можно возвращать именно массив. Вызов то идёт через IDispatch...
Здравствуйте, George Seryakov, Вы писали:
Tom>>Можно возвращать именно массив. Вызов то идёт через IDispatch...
GS>Матка боска, не получается! Студия шестая.
Здравствуйте, George Seryakov, Вы писали:
GS>Здравствуйте, George Seryakov, Вы писали:
Tom>>>Можно возвращать именно массив. Вызов то идёт через IDispatch...
GS>>Матка боска, не получается! Студия шестая.
GS>Примерчик вгружен на http://rsdn.ru/File/3778/safearr.zip.
Здравствуйте, George Seryakov, Вы писали:
GS>Здравствуйте, George Seryakov, Вы писали:
Tom>>>Можно возвращать именно массив. Вызов то идёт через IDispatch...
GS>>Матка боска, не получается! Студия шестая.
GS>Примерчик вгружен на http://rsdn.ru/File/3778/safearr.zip.
И работать должны массивы с типом VT_VARIANT и не работать с VT_BSTR, хотя последние верно получаются из метода в скрипт и могут передаваться далее в другие методы.
Здравствуйте, George Seryakov, Вы писали:
GS>Здравствуйте, George Seryakov, Вы писали:
Tom>>>Можно возвращать именно массив. Вызов то идёт через IDispatch...
GS>>Матка боска, не получается! Студия шестая.
GS>Примерчик вгружен на http://rsdn.ru/File/3778/safearr.zip.
Отец, совсем видимо склероз замучал старого маразматика SAFEARRAY(BSTR) не работает, видимо и не должен.
Здравствуйте, Victor1, Вы писали:
V>Нужно, ли обязательно делать V>SafeArrayDestroy()?
В данном случае (когда массив отдается) — нет. Когда массив передается по возврату, права владения переходят вызывающему клиенту, он и должен дестроить. Подробнее см http://msdn2.microsoft.com/en-gb/library/ms686638.aspx.
Здравствуйте, Victor1, Вы писали:
V>Здравствуйте, Tom, Вы писали:
Tom>>Здравствуйте, Victor1, Вы писали:
V>>>Здравствуйте, у меня такая проблема как передать иассив строк из cpp в JavaScript? Я заполняю SAFEARRAY элеменитами BSTR. А вот как быть дальше я пока не понимаю. Возможно кто-то уже сталкивался с такой проблемой. Заранее спасибо.
Tom>>Дальше надо создать COM обьект и в методе вернуть массив, и вызвать твой COM обьект в JavaScript-е
V>Насчет COM я понял. Нет ли у Вас примера решения подобного вопроса?
Если вы можете использовать ATL, то не ломайте голову сделайте как-нибудь так
И еще следует учитывать, что если вы собираетесь использовать ваш ком объект из скриптов то следует использовать только [out, retval] параметр для вашего массива. jscript не понимает out параметров, а vbscript понимает такие параметры только если там VARIANT, так что чтобы не было проблем лучше использовать [out, retval]