Текущее время: Вт, апр 16 2024, 15:49

Часовой пояс: 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 часа


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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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