![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
Интегрируюсь к Некой Системе. Один из её методов возвращает, как написано в хелпе для Некой Системы, «набор данных с полями». Предположим, поля:
Field0: integer; Field1: string; Field2: Boolean; Field3: text; Иначе говоря (если я правильно понял) это массив типа записи из четырёх полей. Фактически метод возвращает OleVariant. Дак вот я никак не врублюсь как мне из ОлеВарианта достать этот самый массив типа записи. Если присваивать всё это массиву типа байта, то туда что-то помещается. Если декодировать это в char, то там видны всякие разные слова. Но если попробовать присвоить это массиву типа char, то в итоге получается куча #0. А если присваивать структурам array of record, то по жизни одни нули и пустые строки. В общеме, может кто-нибудь подскажет как мне быть??? Забыл ещё сказать. Если этот самый возвращённый OleVariant в трассировке запихать в окошко, которое по F7 вызывается, то внизу появляется надпись "array of byte". Это сообщение отредактировал(а) EKoshelev - 16.6.2005, 07:46 -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| Satana |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 564 Регистрация: 15.9.2004 Где: Ставрополь, СЗ ра йон Репутация: 1 Всего: 5 |
ну наверное так:
ну и уже походу будешь обращаться к элементам записи так: chegonibud.Field0:=0; ну и так далее... -------------------- |
|||
|
||||
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
Satana
Ну-у-у-у... я уже писал ведь, что если написать
то в ЧегоНибудь будут нули и пустые строки. А если ты имел в виду, что нужно присваивать Chegonibud := HrenoMoyo то я не очень понимаю что ты имел в виду. -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| Satana |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 564 Регистрация: 15.9.2004 Где: Ставрополь, СЗ ра йон Репутация: 1 Всего: 5 |
да не ты не так понял раз ты объявил тебе возвращается структура то ты должен сделать у себя в программе такую же структуру (тобишь запись типа record)
и присваивать не
а так:
и т.д. И вообще приведи пример того что тебе нада (кусок кода выложи своего) тогдя я может помогу тебе другим примером. -------------------- |
||||
|
|||||
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
Satana
Ну, во-первых, ЧегоНибудь должно быть прежде всего массивом, а уж потом только записью. Но это ладно. Я бы с удовольствием написал так как ты во втором фрагменте предложил, только я не знаю как достать Field0_iz_nabora_dannyx_vernutyx_systemoy. Фича в том, что есть метод ком-объекта GetData (к примеру). В хелпе написано, что этот метод (функция) возвращает набор значений с такими-то полями. А фактически, с точки зрения дельфы, он возвращает значение типа OleVariant. То есть в этом ОлеВарианте каким-то хитрым образом хранится массив типа записи с четырьмя полями. А как эти поля от туда доставать (в нужном мне формате) я не знаю. То есть, как я уже написал, если этот ОлеВариант присвоить массиву типа байта, то в этом массиве появляется куча чисел, 7 с лишним тысяч. Я преобразовывал их в буквы и находил там слова, которые, по делу, и должны там находиться. Но если ОлеВариант попытаться присваивать к каким-нибудь другим структурам, то в них оказываются нули и пустые строки. Короче, до того, что ты мне предложил я бы и сам догнал в момент. Но тут всё не так просто... -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| Guest |
|
||||
|
Unregistered |
А что, эта система иимеет представление о длинных строках дельфи?? Она что на Delphi/Builder написана?? По сабжу, если структуру необходимо передать как вариант, то обычно вариант представляют как массив байт, в который и пишут всю запись целеком..
Но вот как твоя система передает строки(то есть ссылочные типы) - это не понятно.. Те нужно связываться с разработчиками, там наврядли, что либо гадаешь.. |
||||
|
|||||
| jack128_ |
|
|||
|
Unregistered |
читать как "а так наврядли угадаешь.." |
|||
|
||||
| Satana |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 564 Регистрация: 15.9.2004 Где: Ставрополь, СЗ ра йон Репутация: 1 Всего: 5 |
EKoshelev ну а ты можешь хотябы вставить сюда то что пишут в хелпе? а то все абстракции да обстракции
-------------------- |
|||
|
||||
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
Guest, ты, гляжу, мужик-то умный, зарегистрировался бы. А jack128_ это тоже ты?
Дак ты хочешь сказать, что такая схема передачи данных (массив оф байт) является стандартной? На чём написана система не знаю, но о длинных строках она, наверняк, имеет представление, т.к. там был примерно следующий дамп. 1 1 1 0 0 0 13 0 слово из тринадцати букв ... В хелпе было написано, что первым идёт _ID, а потом _Name. Правда считать непосредственно в строковые типы (string, WideString, WideChar) у меня не получилось, я так понял, это всё указатели. Приходилось читать кол-во байт, а потом в цикле по одной букве прибавлять. А на счёт разработчика - это я сам уже понял, да и товарищ один присоветовал тоже самое сделать. Вот ты ещё. Спасибо за код, думаю пригодится. Кстати, я чё-то до сих пор не знаю что такое packed record, т.е. про обычный рекорд знаю... Satana Ну если хошь кусок хелпа - я чуть по позже выложу. Просто jack128_, видать, лучше схватил что мне нужно. -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
| Dynamic |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 372 Регистрация: 5.7.2004 Где: Салехард Репутация: 12 Всего: 15 |
запись, поля которой не выравниваются ни по каким адресам, а "прилеплены" друг к другу, т.е. в итоге, могут занимать меньше памяти, но обрабатываться медленнее. -------------------- Было бы о чем молчать, а уж что сказать – всегда найдется... |
|||
|
||||
| jack128_ |
|
||||||||||
|
Unregistered |
Естественно стандартами OLE это не регламентировано, но это удобный способ для передачи данных, не доддерживаемых OLE напрямую.
"Там" это где ? Ты как я понял получил массив байтов в виде Variant' a ? Это вот его дамп ? Для начала я вообще не понял, что ты должен получить потому что вот тут
ты говориш одно, а вот тут
Дам конечно больше под второй вариант подходит.. Сначала 4 байта - _Id = $0111 Потом длина строки - 13 , потом сама строка.. Вобщем если ты еще не связался с разработком, проясни ситуацию..
|
||||||||||
|
|||||||||||
| EKoshelev |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 509 Регистрация: 1.9.2004 Репутация: нет Всего: нет |
jack128_, на счёт того, что я сначала одно говорю, а потом другое, дак это я сначала писал для примера, а потом как в натуре. На счёт дампа - да, это вариант.
А вообще, пацаны, всем спасибо, мне уже нюх натёрли как это дело надо считывать. Там через ДатаСоурс всё вообще клёво получается. Всем спасибо за желание помочь!!! Это сообщение отредактировал(а) EKoshelev - 27.6.2005, 11:29 -------------------- Вежливым и адекватным предлагаю общаться на "ты". |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |