Native API не умеет принимать ДвоичныеДанные? #572435


#0 by H A D G E H O G s
При выполнении метода объекта, в которого пытаюсь передать ДвоичныеДанные, 1С ка вываливает модальное окно с ошибкой "Неверный аргумент" и после, закрывается. Дебагером по стеку в Дельфи вижу, что ошибка возникает раньше, чем выполнение перейдет во внешку, тоесть проверка производиться в самой платформе (была бы ошибка в описании приема параметра функции - стек бы "дошел" до самой компоненты). Тоесть, возвращать ДвоичныеДанные она (компонента) - может, а принимать - нет? p.s. Как бы не проблема - передам Base64 строку, но все таки..?
#1 by H A D G E H O G s
Просто нигде не описано, блеать!
#2 by H A D G E H O G s
up
#3 by orefkov
Насколько я помню, в Native API между ВК и платформой ходят только простые типы данных, объекты не поддерживаются. А так вообще по описанию плохо понятна твоя проблема. Код посмотреть, мож че и подсказал бы.
#4 by DmitrO
Cаня, это так. Но я своими глазами в документации по технологии ВК читал как там передавать из компоненты именно двоичные данные. (Но вообще-то не пробовал.) Удивительно что в компоненту их передать нельзя.. похоже на косяк. релиз бы назвать надо бы..
#5 by DmitrO
Байтовый SafeArray тоже не мешало бы проверить
#6 by Serginio1
Вообщето судя по соурсам procedure TV8UserObject.V8ClearVar(V: PV8Variant); begin  if (V.vt and VTYPE_TYPEMASK) in [VTYPE_BLOB, VTYPE_PSTR, VTYPE_PWSTR,  begin    case (V.vt and VTYPE_TYPEMASK) of      VTYPE_BLOB:        if V.VarEnum.vtRecString.pstrVal <> nil then          V8MM.FreeMemory(@(V.VarEnum.vtRecString.pstrVal));      VTYPE_PSTR:        if V.VarEnum.vtRecString.pstrVal <> nil then          V8MM.FreeMemory(@(V.VarEnum.vtRecString.pstrVal));      VTYPE_PWSTR:        if V.VarEnum.vtRecWideString.pwstrVal <> nil then          V8MM.FreeMemory(@(V.VarEnum.vtRecWideString.pwstrVal)); По идее должен, только память выделять и очищатьсамому .нужно
#7 by Serginio1
А вообще по уму нужно сделать оболочку для IDispatch через ITypeInfo и будет все работать на вин клиентах.
#8 by Serginio1
Понял. А обратно созданые из ВК двоичные данные передает?
#9 by H A D G E H O G s
Проверял из 1С в ВК передать safearray - та же фигня.
#10 by H A D G E H O G s
Вообще - покуй XDTO преобразование - и массив с числами (строками) в виде текста ушел в ВК. Там его ласково встречает TXMLDocument и все пучком.
#11 by H A D G E H O G s
Вот тут подробнее плиз!
#12 by H A D G E H O G s
И еще - че то задумался - а в СП нигде не встретил, что COM компонента на Тонком недоступна. Принял на веру читая форум. Это факт?
#13 by Serginio1
Ну ты даешь? Уже лет десять пользуюсь, только этой ВК с с объектами автоматизации. Для Native API между методами нужно из PV8Variant в олевариант и обратно и писать только Idispatch объекты хоть на Delphi, хоть на Net и не мучаться
#14 by Serginio1
А вообще до этой ВК я и делал маленькую ВК которая возвращала в 1С ссылку на appDispatch которую передавал уже в олешный объект откуда доставал все интерфейсы обратного вызова, вот и сейчас так же можно и поступить.
#15 by H A D G E H O G s
Ниче не понял. :-(
#16 by Serginio1
ВК нужна в большинстве случаев только для ExternalEvent В олешной ВК это интерфейс а вернее IAsyncEvent. Просто создавалась вк которая при function Init(pConnection: IDispatch) сохраняла pConnection И был метод который возвращал этот pConnection в 1С и уже эта переменная передавалась в Олеобъект который из этой переменной и доставал все нужные интерфейсы. Здесь немного сложнее но можно получить TV8AddInDefBase и передавать его в оле объект. Но как там передача с олеобъектами. Вообще как через тип TV8InterfaceVarRec можно передать.
#17 by Serginio1
Вернее так внутри вк создать оле Объект который бы реализовал все интерфейсы через TV8AddInDefBase, вернуть в 1С через переменную типа TV8InterfaceVarRec и вот ее уже передавать в Оле объект.
#18 by H A D G E H O G s
<<вернуть в 1С через переменную типа TV8InterfaceVarRec>>
#19 by H A D G E H O G s
Не получится, 1С зарубит это дело
#20 by Serginio1
Точно? Тогда зачем он нужен этот тип TV8InterfaceVarRec? Но в любом случае создать ВК которая загружала бы оле объект и вызывала бы его методы через IDispatch c рефлексией через ITypeInfo не сложно. Рыба уже есть. А объект поддерживающий IAsyncEvent,IStatusLine,IErrorLog все равно нужно. Попытка не пытка?
#21 by H A D G E H O G s
Но у меня есть идея, как передать ole объект в 1С. 1) создать оле Объект который бы реализовал все интерфейсы через TV8AddInDefBase 2) Зарегистрировать его в ROT 3) Вернуть его идентификатор в ROT -е в 1С (не помню че там GUID вроде) 4) Написать COM-сервер простенький, который получит этот COM объект из ROT-а 5) Новый ComОбъект поддерживается ТонкимКлиентом 6) Вернем ОЛЕ объект вызовом метода COM сервера. 7) Профит
#22 by H A D G E H O G s
Думаю - зарубит.
#23 by acsent
А смысл тогда в нативных компонентах?
#24 by Serginio1
По уму раз 22: (vtRecInterface: TV8InterfaceVarRec);      24: (vtRecWideString: TV8WideStringVarRec); Раз две последние работают, почему первый не должен. Все равно будешь реализовывать интерфейсы попробуй и с передацей в 1С. А как ты из ВК в этот пока непонятном для меня ROT будешь регестрировать?
#25 by H A D G E H O G s
а) Выполнение на линукс-сервере б) Выполнение в неIE веб браузере в) Теоретически - шустрее Вроде бы так.
#26 by Serginio1
Для линукса, маков
#27 by Serginio1
ROT я так понимаю синглетон оле сервер в который можно передать объект и из него и получить?
#28 by acsent
Какие тогда могут быть разговоры про ОЛЕ?
#29 by acsent
Вот выйдет нативный линукс клиент
#30 by Serginio1
А почему Вэб клиент поддерживает ComОбъект?
#31 by H A D G E H O G s
цитата Возвращаемые значения типа VTYPE_ARRAY и VTYPE_BYREF не поддерживаются.
#32 by H A D G E H O G s
Да просто механизм операционки для хранения COM объектов (по желанию).
#33 by Serginio1
Спасибо вспомнил. Но в конце то концов можно вернуть как число, а в олеобъекте привести к интерфейсу
#34 by Serginio1
Главное сохранить ссылку на неё в ВК что бы не разрушилась
#35 by H A D G E H O G s
Но это все лирика. Физика говорит мне, что пока буду юзать XDTO. А вот червь сомнений гложет меня в плане - осилит ли система XDTO сериализацию на массив этак скажем в пару миллионов элементов?
#36 by Serginio1
А зачем тебе XDTO. Я вообще склоняюсь к встроенной Базе данных кторых как собак нерезанных.И сериализуй и десериализуй из неё на основании метаданных. Все очень комактно и быстро за счет индексов.
#37 by Кирпич
Ну в документации 1с написано что только простые типы и можно возвращать из ВК двоичные данные. Всё. Чо вы как будто расстроилися.
#38 by Serginio1
Ну объект это число и лучше четырех байтное. Просто нужно знать к чему его приводить.
#39 by Serginio1
Тьфу восьми байтное т.к. ИЕ и 64 разрядный бывает
#40 by H A D G E H O G s
Мне не нужны индексы. Я ничего искать не буду. Мне нужен поток.
#41 by Serginio1
И чем XDTO от бд отличается? Только излишней информацией. Если объекты содежат множество ссылочных полей, то сериализавать их проще в разные таблицы с индексами по ключевым полям.
#42 by H A D G E H O G s
Забей. Это не важно.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям