Текущее время: Чт, апр 18 2024, 15:39

Часовой пояс: UTC + 3 часа


Правила форума


ВНИМАНИЕ!

Вопросы по SAP Query и Quick View - сюда



Начать новую тему Ответить на тему  [ Сообщений: 7 ] 
Автор Сообщение
 Заголовок сообщения: Вопрос про OLE
СообщениеДобавлено: Ср, дек 07 2016, 17:25 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, мар 24 2010, 08:46
Сообщения: 56
Пол: Мужской
Есть следующая задача.

Есть библиотека, реализующая COM интерфейс.
У него есть 1 метод и 2 свойства.

Вызов типа:
Code:
data
: a type string
.
SET PROPERTY OF ole 'A' = 'AaAa'.
GET PROPERTY OF ole 'A' = a.

Отрабатывает.

Метод интерфейса формирует строку типа BYTE*.
(Собственно это строку мне и нужно оттуда получить.)

Свойство OLE объекта объявлено как "BSTR a".
(#typedef WCHAR *BSTR)

Передать в уникод строку поток байт просто так нельзя, поэтому строка байт переводится в BASE64, BASE64 строка приводится к уникоду и вроде как должна вернуться как значение свойства.
Вот тут и происходит облом. Я точно знаю, что метод отработал. Сформировал строку. Она была преобразована в BASE64 и так далее...
Но в момент:
Code:
data
: a type string
.
GET PROPERTY OF ole 'A' = a.

sy-subrc я получаю 4. Тобишь ошибка чтения свойства...

Может кто-то сможет подсказать, что я делаю не так?


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос про OLE  Тема решена
СообщениеДобавлено: Чт, дек 08 2016, 11:34 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, мар 24 2010, 08:46
Сообщения: 56
Пол: Мужской
В общем, проблему решил, но несколько "нестандартно".

Сделал 2 свойства.
Длинна строки(изначально я ее знаю)
И 1 байт параметризованный.

Дальше так. Вызываю метод OLE, который формирует строку. Дальше считываю значение, содержащее длину строки.
А дальше в цикле по байту вытягиваю строку.
Code:
WHILE off < len.

  GET PROPERTY OF ole 'byte' = b
  EXPORTING
    #1 = off.

  IF sy-subrc <> 0. BREAK-POINT. ENDIF.

  c = c && b.

  ADD 1 TO off.

ENDWHILE.



Работает это не быстро, но гарантированно.

[s]ЗЫ: Принимающая переменная должна быть типа X, в том случае, если принимать в xstring - придет два байта. Первый значащий, второй пустой(например FD00).[/s]
Обновления. Ошибся я. Не байт эта зараза возвращает, а integer... То есть, если в оригинале было 30, я в ABAPе получу 48... Сейчас буду думать дальше. Ну или просто приводить назад в шестнадцатиричное значение...

Если найду решение изначальной проблемы - отпишусь.


Последний раз редактировалось Cyrick Чт, дек 08 2016, 12:42, всего редактировалось 1 раз.

Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос про OLE
СообщениеДобавлено: Чт, дек 08 2016, 11:42 
Специалист
Специалист

Зарегистрирован:
Чт, мар 25 2010, 09:02
Сообщения: 207
А какая общая длинна строки? Не больше 256?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопрос про OLE
СообщениеДобавлено: Чт, дек 08 2016, 11:49 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, мар 24 2010, 08:46
Сообщения: 56
Пол: Мужской
AFH написал(а):
А какая общая длинна строки? Не больше 256?

Совершенно любая.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос про OLE
СообщениеДобавлено: Чт, дек 08 2016, 11:57 
Специалист
Специалист

Зарегистрирован:
Чт, мар 25 2010, 09:02
Сообщения: 207
Может быть значения длиннее 256 байт не пролазят? Попробовать передавать не по 1 байту а по 64/128?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
 Заголовок сообщения: Re: Вопрос про OLE
СообщениеДобавлено: Чт, дек 08 2016, 12:39 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, мар 24 2010, 08:46
Сообщения: 56
Пол: Мужской
AFH написал(а):
Может быть значения длиннее 256 байт не пролазят? Попробовать передавать не по 1 байту а по 64/128?

Вроде предпосылок нет... Как минимум не встречался где-то в описании с такими ограничениями.
Но это идея, можно попробовать.
Хотя с точки зрения прозрачности - более нагруженный код получится, а о производительности речь не идет. Операция не частая. Сейчас у меня отрабатывает за 3-5 секунд, так что не критично.


Пометить тему как нерешенную
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопрос про OLE
СообщениеДобавлено: Пт, янв 13 2017, 14:11 
Младший специалист
Младший специалист

Зарегистрирован:
Ср, ноя 10 2004, 11:33
Сообщения: 88
Здравствуйте, Вы случайно обращаетесь не к криптобиблиотеке?


Пометить тему как нерешенную
Вернуться к началу
 Профиль Отправить email  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 7 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot]


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB