Передать в COM библиотеку строку

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Передать в COM библиотеку строку

Сообщение d3drm » 12.01.2009 (Пн) 22:52

Здравствуйте все!

Возникла задача передать в COM библиотеку в класс с интерфейсом IDispatch строку, а затем в самой функции нужно к этой строке иметь доступ как к байтовому массиву. Функция должна возвращать строку и передать ее обратно в то место, откуда функция вызывается.

Как должно выглядеть описание фунции в файле idl?

Пока делаю вот так:

[id(0x00000101), helpstring("Add +")]
HRESULT Add(
[in] byte[],
[in] byte[],
[in] byte,
[in] byte,
[in, out] byte[] );

но сказали, что так делать нельзя, хотя и работает.
ХЎ

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Передать в COM библиотеку строку

Сообщение tyomitch » 12.01.2009 (Пн) 23:23

На каком языке клиент? Если на Сях, то всё в порядке.
Изображение

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Re: Передать в COM библиотеку строку

Сообщение d3drm » 12.01.2009 (Пн) 23:32

клиент на VB 6, вот что пишет преподаватель:


компонент не будет работать, если будет загружен в виде отдельного приложения, а не подгружен в адресное пространство клиента (нельзя передавать ссылки на участки памяти в виде [in, out] byte[], надо передавать сами участки памяти, например, [in, out] BSTR, или [in, out] SAFEARRAY, или [in, out] VARIANT с передачей массива байт)



делаю разные махинации, но в клиент ничего не приходит. собственно прошу подсказать как правильно объявить переменные и как из клиента их туда передавать. возможна передача из клиента либо массива байт, либо строки.
ХЎ

d3drm
Астролог
Астролог
Аватара пользователя
 
Сообщения: 2873
Зарегистрирован: 29.05.2002 (Ср) 23:34
Откуда: МаСКвА

Re: Передать в COM библиотеку строку

Сообщение d3drm » 12.01.2009 (Пн) 23:55

Если использую BSTR клиент почему-то выдает ошибку Type mismatch, когда передаю строку.

Описание в IDL выглядит вот так:

Код: Выделить всё

[id(0x00000101), helpstring("Add +")]
      HRESULT Add(
         [in] byte[],
         [in] byte[],
         [in] byte,
         [in] byte,
         [in, out] BSTR );

ХЎ

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Re: Передать в COM библиотеку строку

Сообщение tyomitch » 13.01.2009 (Вт) 1:17

[in, out] BSTR *


а почему там не [out, retval], если по смыслу это результат?
Изображение

Ronin
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 635
Зарегистрирован: 13.02.2002 (Ср) 14:16
Откуда: Россия, Москва

Re: Передать в COM библиотеку строку

Сообщение Ronin » 16.01.2009 (Пт) 14:45

Ох уж этот Леша... =)
С уважением,
Игорь Шувалов aka Ronin


Вернуться в Народный треп

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

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

    TopList  
cron