Кто работал с ДвоичнымиДанными в NativeApi? #637372


#0 by H A D G E H O G s
Дня доброго. Собственно, отправляю в компоненту ДвоичныеДанные. В компоненте получаю эти двоичные данные функцией модуля v8napi begin  case (V.vt and VTYPE_TYPEMASK) of    VTYPE_BLOB: Она возвращает указатель на первый байт блока памяти, (странно, почему не pointer). Как узнать длину?
#1 by H A D G E H O G s
v.VarEnum.vtRecString.strLen скорее всего оно. Сравню с Двоичные.Размер, совпадет, оно... Или я вообще не туда залез?
#2 by Serginio1
Не ты писал? Смотри работу с SafeArray.
#3 by H A D G E H O G s
Не я. Native не работает с safearray же
#4 by Serginio1
type Это почему же?
#5 by H A D G E H O G s
Говорит "Неверный аргумент" на ДвоичныеДанные. Дельфи тормозится даже на ошибки в защищенном блоке, даже без отладочных dcu, тут - нет. Значит это обработанно самой 1С-кой... Какой тип данных 1С должен представляться BLOB -ом в ВК. По идее - подходили ДвоичныеДанные, но вот нет!
#6 by Serginio1
Вообще смотри функции VarArrayLock получаешь ссылку на двоичные данные с обязательным вызовом VarArrayUnlock Если нужны тормоза то v[i]
#7 by Serginio1
Двоичные данные это объект Двоичные данные. Передавай в виде Base64
#8 by H A D G E H O G s
Это я и сам знаю.
#9 by H A D G E H O G s
Для чего нужна функция function V8AsBlob(V: PV8Variant): PByte; begin  case (V.vt and VTYPE_TYPEMASK) of
#10 by Serginio1
Понял. Сразу не врубился. Но вообще данные логичнее передавать через safeArray? Кстати а у них то есть описание этого блоба?
#11 by H A D G E H O G s
Компонента может возвращать любые двоичные данные, например – сформированное изображение штрих-кода. Для этого данные помещаются в поле pstrVal структуры tVariant, в strLen – размер данных, а тип устанавливается в VTYPE_BLOB. 1С:Предприятие использует для них тип ДвоичныеДанные. Про получать ничего не сказано. Прям бида с ними.
#12 by Serginio1
Ну и v.VarEnum.vtRecString.strLen работает?
#13 by H A D G E H O G s
В момент: Компонента.НапечататьКартинку(Двоичное); 1С дает ошибку {Форма.ФормаДокумента.Форма}: Ошибка при вызове метода контекста (НапечататьКартинку)    Компонента.НапечататьКартинку(Двоичное); по причине: Неверный аргумент А отладчик Дельфи даже не шелохнется.
#14 by Serginio1
PByte(V.pstrVal); а длина в V.strLen  Нет?
#15 by Serginio1
Так ты формируешь двоичные даные на стороне Delphi? А как ты эти ДД создаешь?
#16 by H A D G E H O G s
Нет. ДвоичныеДанные у меня в 1С. Когда я их отправляю в компоненту - возникает ошибка
#17 by Serginio1
А понял. А можешь вызвать в Delphi функцию Размер? Помоему передается объект ДД.
#18 by H A D G E H O G s
Доктор, меня игнорируют! Следующий!
#19 by H A D G E H O G s
Какое Дельфи???? 1С ка отстреливает ДвоичныеДанные еще до передачи управления компоненте, см !
#20 by Serginio1
Так в итоге DD передается как VTYPE_BLOB а не varDispatch
#21 by H A D G E H O G s
Мистец
#22 by Serginio1
А что на стороне Delphi ты к варианту не можешь применить метод если он поддерживает интерфейс IDispatch? Правда тип должен быть varDispatch
#23 by H A D G E H O G s
Ты читал?
#24 by Serginio1
Читал. Я спрашивал какой тип тебе в Delphi попадает Если смотреть структуру То ссылка должна храниться в cbElements Иследуй VarEnum и Vt
#25 by H A D G E H O G s
Как их исследовать?
#26 by Serginio1
Ты получаешь ссылку на PV8Variant. Чему равно значение VarEnum и V8TYPEVAR TVarEnum = record    case byte of
#27 by Serginio1
Тьфу можно исследовать только V8TYPEVAR.
#28 by Serginio1
И данные могут храниться как в VarEnum так и в cbElements
#29 by H A D G E H O G s
Еще раз. Внимательно прочитай . Как ты его понимаешь?
#30 by H A D G E H O G s
#31 by Serginio1
Кстати у safeArray тоже есть свойство cbElements То есть данные до Delphi даже не доходят?
#32 by H A D G E H O G s
ДА! Наконец то!
#33 by Serginio1
В 7 ке отладчик тоже плохо срабатывал приходилось вызывать ShowMessage
#34 by Serginio1
Передавай в виде Base64. Так и пиши, что вызовов до ВК не доходит. А не шелыхиваться может по многим причинам.
#35 by Serginio1
А кстати в NativeAPI можно передавать объекты 1С?
#36 by Serginio1
Кстати получение длины function V8StrLen(V: PV8Variant): integer; begin  case (V.vt and VTYPE_TYPEMASK) of
#37 by H A D G E H O G s
Ну их нафиг, эти заморочки, этот черный ящик херов. Сделал через временный файл. Чем больше работаю с 1С - тем больше убеждаюсь, что работают самые тупые и прямые методы.
#38 by Serginio1
Кстати ради интереса а какой тип получается при возврате данных ввиде VTYPE_BLOB
#39 by Serginio1
так через строку ведь проще.
Тэги: 1С 8
Ответить:
Комментарии доступны только авторизированным пользователям