|
Native API не умеет принимать ДвоичныеДанные? | ☑ | ||
---|---|---|---|---|
0
H A D G E H O G s
01.10.11
✎
20:31
|
При выполнении метода объекта, в которого пытаюсь передать ДвоичныеДанные, 1С ка вываливает модальное окно с ошибкой "Неверный аргумент" и после, закрывается.
Дебагером по стеку в Дельфи вижу, что ошибка возникает раньше, чем выполнение перейдет во внешку, тоесть проверка производиться в самой платформе (была бы ошибка в описании приема параметра функции - стек бы "дошел" до самой компоненты). Тоесть, возвращать ДвоичныеДанные она (компонента) - может, а принимать - нет? p.s. Как бы не проблема - передам Base64 строку, но все таки..? |
|||
1
H A D G E H O G s
01.10.11
✎
20:32
|
Просто нигде не описано, блеать!
|
|||
2
H A D G E H O G s
01.10.11
✎
21:10
|
up
|
|||
3
orefkov
01.10.11
✎
23:10
|
Насколько я помню, в Native API между ВК и платформой ходят только простые типы данных, объекты не поддерживаются.
А так вообще по описанию плохо понятна твоя проблема. Код посмотреть, мож че и подсказал бы. |
|||
4
DmitrO
01.10.11
✎
23:58
|
(3)Cаня, это так. Но я своими глазами в документации по технологии ВК читал как там передавать из компоненты именно двоичные данные. (Но вообще-то не пробовал.)
Удивительно что в компоненту их передать нельзя.. похоже на косяк. (2) релиз бы назвать надо бы.. |
|||
5
DmitrO
02.10.11
✎
00:00
|
(0)Байтовый SafeArray тоже не мешало бы проверить
|
|||
6
Serginio1
04.10.11
✎
15:00
|
Вообщето судя по соурсам
procedure TV8UserObject.V8ClearVar(V: PV8Variant); begin if (V.vt and VTYPE_TYPEMASK) in [VTYPE_BLOB, VTYPE_PSTR, VTYPE_PWSTR, VTYPE_INTERFACE] then 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)); VTYPE_INTERFACE: IInterface(V.VarEnum.vtRecInterface.pInterfaceVal) := nil; end; end; FillChar(V^, sizeof(V8Variant), 0); end; function TV8UserObject.V8SetBlob(V: PV8Variant; Value: PByte; Length: integer): boolean; begin result := (Value = nil); if result then Exit; V8ClearVar(V); V.vt := VTYPE_BLOB; result := V8MM.AllocMemory(@(V.VarEnum.vtRecString.pstrVal), Length); if result then begin Move(Value^, V.VarEnum.vtRecString.pstrVal^, Length); V.VarEnum.vtRecString.strLen := Length; end; end; По идее должен, только память выделять и очищатьсамому .нужно |
|||
7
Serginio1
04.10.11
✎
15:03
|
А вообще по уму нужно сделать оболочку для IDispatch через ITypeInfo и будет все работать на вин клиентах.
|
|||
8
Serginio1
04.10.11
✎
15:06
|
Понял. А обратно созданые из ВК двоичные данные передает?
|
|||
9
H A D G E H O G s
04.10.11
✎
15:10
|
(6) Проверял из 1С в ВК передать safearray - та же фигня.
|
|||
10
H A D G E H O G s
04.10.11
✎
15:11
|
Вообще - покуй
XDTO преобразование - и массив с числами (строками) в виде текста ушел в ВК. Там его ласково встречает TXMLDocument и все пучком. |
|||
11
H A D G E H O G s
04.10.11
✎
15:12
|
(7) Вот тут подробнее плиз!
|
|||
12
H A D G E H O G s
04.10.11
✎
15:13
|
И еще - че то задумался - а в СП нигде не встретил, что COM компонента на Тонком недоступна. Принял на веру читая форум. Это факт?
|
|||
13
Serginio1
04.10.11
✎
15:21
|
Ну ты даешь? Уже лет десять пользуюсь, только этой ВК с с объектами автоматизации.
http://1c.proclub.ru/modules/mydownloads/personal.php?cid=115&lid=2019 Для Native API между методами нужно из PV8Variant в олевариант и обратно и писать только Idispatch объекты хоть на Delphi, хоть на Net и не мучаться |
|||
14
Serginio1
04.10.11
✎
15:34
|
А вообще до этой ВК я и делал маленькую ВК которая возвращала в 1С ссылку на appDispatch которую передавал уже в олешный объект откуда доставал все интерфейсы обратного вызова, вот и сейчас так же можно и поступить.
|
|||
15
H A D G E H O G s
04.10.11
✎
15:37
|
(14) Ниче не понял. :-(
|
|||
16
Serginio1
04.10.11
✎
16:07
|
ВК нужна в большинстве случаев только для ExternalEvent
В олешной ВК это интерфейс а вернее IAsyncEvent. Просто создавалась вк которая при function Init(pConnection: IDispatch) сохраняла pConnection И был метод который возвращал этот pConnection в 1С и уже эта переменная передавалась в Олеобъект который из этой переменной и доставал все нужные интерфейсы. Здесь немного сложнее но можно получить TV8AddInDefBase и передавать его в оле объект. Но как там передача с олеобъектами. Вообще как через тип TV8InterfaceVarRec можно передать. |
|||
17
Serginio1
04.10.11
✎
16:15
|
Вернее так внутри вк создать оле Объект который бы реализовал все интерфейсы через TV8AddInDefBase, вернуть в 1С через переменную типа TV8InterfaceVarRec и вот ее уже передавать в Оле объект.
|
|||
18
H A D G E H O G s
04.10.11
✎
16:43
|
<<вернуть в 1С через переменную типа TV8InterfaceVarRec>>
|
|||
19
H A D G E H O G s
04.10.11
✎
16:43
|
Не получится, 1С зарубит это дело
|
|||
20
Serginio1
04.10.11
✎
16:50
|
Точно? Тогда зачем он нужен этот тип TV8InterfaceVarRec? Но в любом случае создать ВК которая загружала бы оле объект и вызывала бы его методы через IDispatch c рефлексией через ITypeInfo не сложно. Рыба уже есть. А объект поддерживающий IAsyncEvent,IStatusLine,IErrorLog все равно нужно. Попытка не пытка?
|
|||
21
H A D G E H O G s
04.10.11
✎
16:50
|
Но у меня есть идея, как передать ole объект в 1С.
1) создать оле Объект который бы реализовал все интерфейсы через TV8AddInDefBase 2) Зарегистрировать его в ROT 3) Вернуть его идентификатор в ROT -е в 1С (не помню че там GUID вроде) 4) Написать COM-сервер простенький, который получит этот COM объект из ROT-а 5) Новый ComОбъект() поддерживается ТонкимКлиентом 6) Вернем ОЛЕ объект вызовом метода COM сервера. 7) Профит |
|||
22
H A D G E H O G s
04.10.11
✎
16:51
|
(20) Думаю - зарубит.
|
|||
23
acsent
04.10.11
✎
16:56
|
А смысл тогда в нативных компонентах?
|
|||
24
Serginio1
04.10.11
✎
16:58
|
По уму раз 22: (vtRecInterface: TV8InterfaceVarRec);
23: (vtRecString: TV8StringVarRec); 24: (vtRecWideString: TV8WideStringVarRec); Раз две последние работают, почему первый не должен. Все равно будешь реализовывать интерфейсы попробуй и с передацей в 1С. А как ты из ВК в этот пока непонятном для меня ROT будешь регестрировать? |
|||
25
H A D G E H O G s
04.10.11
✎
16:58
|
(23)
а) Выполнение на линукс-сервере б) Выполнение в неIE веб браузере в) Теоретически - шустрее Вроде бы так. |
|||
26
Serginio1
04.10.11
✎
16:58
|
(23) Для линукса, маков
|
|||
27
Serginio1
04.10.11
✎
17:00
|
ROT я так понимаю синглетон оле сервер в который можно передать объект и из него и получить?
|
|||
28
acsent
04.10.11
✎
17:01
|
(25) Какие тогда могут быть разговоры про ОЛЕ?
|
|||
29
acsent
04.10.11
✎
17:01
|
Вот выйдет нативный линукс клиент
|
|||
30
Serginio1
04.10.11
✎
17:02
|
(29) А почему Вэб клиент поддерживает ComОбъект()?
|
|||
31
H A D G E H O G s
04.10.11
✎
17:03
|
(24)
http://www.asd-dnepr.com/v82vkomponent.html#_cpp_warning цитата Возвращаемые значения типа VTYPE_ARRAY и VTYPE_BYREF не поддерживаются. |
|||
32
H A D G E H O G s
04.10.11
✎
17:05
|
(27) Да просто механизм операционки для хранения COM объектов (по желанию).
http://msdn.microsoft.com/en-us/library/ms695276(VS.85).aspx |
|||
33
Serginio1
04.10.11
✎
17:11
|
Спасибо вспомнил. Но в конце то концов можно вернуть как число, а в олеобъекте привести к интерфейсу
|
|||
34
Serginio1
04.10.11
✎
17:13
|
Главное сохранить ссылку на неё в ВК что бы не разрушилась
|
|||
35
H A D G E H O G s
04.10.11
✎
17:21
|
Но это все лирика.
Физика говорит мне, что пока буду юзать XDTO. А вот червь сомнений гложет меня в плане - осилит ли система XDTO сериализацию на массив этак скажем в пару миллионов элементов? |
|||
36
Serginio1
04.10.11
✎
17:25
|
А зачем тебе XDTO. Я вообще склоняюсь к встроенной Базе данных кторых как собак нерезанных.И сериализуй и десериализуй из неё на основании метаданных. Все очень комактно и быстро за счет индексов.
|
|||
37
Кирпич
04.10.11
✎
17:27
|
Ну в документации 1с написано что только простые типы и можно возвращать из ВК двоичные данные. Всё. Чо вы как будто расстроилися.
|
|||
38
Serginio1
04.10.11
✎
17:33
|
(37) Ну объект это число и лучше четырех байтное. Просто нужно знать к чему его приводить.
|
|||
39
Serginio1
04.10.11
✎
17:33
|
Тьфу восьми байтное т.к. ИЕ и 64 разрядный бывает
|
|||
40
H A D G E H O G s
04.10.11
✎
17:43
|
(36) Мне не нужны индексы. Я ничего искать не буду.
Мне нужен поток. |
|||
41
Serginio1
04.10.11
✎
18:03
|
(40) И чем XDTO от бд отличается? Только излишней информацией. Если объекты содежат множество ссылочных полей, то сериализавать их проще в разные таблицы с индексами по ключевым полям.
|
|||
42
H A D G E H O G s
04.10.11
✎
18:06
|
(41) Забей.
Это не важно. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |