Подскажите, какой нужен тип для передачи двоичных данных...
От: Аноним  
Дата: 27.09.06 04:50
Оценка:
Подскажите, какой нужен тип для передачи двоичных данных в COM-e, чтобы использовался стандартный маршалинг.
И как эту функцию можно поюзать, например в C#.

[id(0), helpstring("method SendData")] HRESULT SendData(.....)

Спасибо.
Re: Подскажите, какой нужен тип для передачи двоичных данных
От: Lamer-Programmer  
Дата: 27.09.06 07:34
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Подскажите, какой нужен тип для передачи двоичных данных в COM-e, чтобы использовался стандартный маршалинг.

А>И как эту функцию можно поюзать, например в C#.

А>[id(0), helpstring("method SendData")] HRESULT SendData(.....)


А>Спасибо.


Я сейчас с таким же вопросом столкнулся... в общем решил конвертировать с помощью binbase64 в BSTR и передовать обыкновенным стрингом. А в С# легко стринг конвертнуть назад в двоичные байты, тем же binbase64.
В схватке "человек против компьютера" всегда побеждает логика!
Re: Подскажите, какой нужен тип для передачи двоичных данных
От: Tom Россия http://www.RSDN.ru
Дата: 27.09.06 08:15
Оценка: +1
Здравствуйте, <Аноним>, Вы писали:

А>Подскажите, какой нужен тип для передачи двоичных данных в COM-e, чтобы использовался стандартный маршалинг.

А>И как эту функцию можно поюзать, например в C#.

А>[id(0), helpstring("method SendData")] HRESULT SendData(.....)


А>Спасибо.


IStream* | BSTR
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Народная мудрось
всем все никому ничего(с).
Re[2]: Подскажите, какой нужен тип для передачи двоичных дан
От: George Seryakov Россия  
Дата: 27.09.06 12:44
Оценка:
Здравствуйте, Tom, Вы писали:

А>>Подскажите, какой нужен тип для передачи двоичных данных в COM-e, чтобы использовался стандартный маршалинг.


Tom>IStream* | BSTR


Ой. Самые негативные впечатления об IStream. То есть работает, и можно передавать сверхбольшие данные и читать их выборочно, но при межпроцессном и межмашинном вызове можно так налететь на ограничение доступа...

IStream, в итоге, пытались заменять на BSTR, что куда натуральнее, но долго объяснять другим (и вспоминать самому) как вычислять длину бистра по длине блока данных и наоборот. Наоборот, кстати, длина блока данных не определена, если только не раздувать все вдвое.

Есть еще рекомендации (микрософта) насчет SAFEARRAY(VT_I1), но по-серьезному я это не пробовал и какие могут быть проблемы — не уяснил.
GS
Re[3]: Подскажите, какой нужен тип для передачи двоичных дан
От: Left2 Украина  
Дата: 27.09.06 13:00
Оценка:
Tom>>IStream* | BSTR

GS>Ой. Самые негативные впечатления об IStream. То есть работает, и можно передавать сверхбольшие данные и читать их выборочно, но при межпроцессном и межмашинном вызове можно так налететь на ограничение доступа...


Интересно, а можно подробнее?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Подскажите, какой нужен тип для передачи двоичных дан
От: Tom Россия http://www.RSDN.ru
Дата: 27.09.06 13:46
Оценка:
Здравствуйте, George Seryakov, Вы писали:

GS>Здравствуйте, Tom, Вы писали:


А>>>Подскажите, какой нужен тип для передачи двоичных данных в COM-e, чтобы использовался стандартный маршалинг.


Tom>>IStream* | BSTR


GS>Ой. Самые негативные впечатления об IStream. То есть работает, и можно передавать сверхбольшие данные и читать их выборочно, но при межпроцессном и межмашинном вызове можно так налететь на ограничение доступа...


Ну это проблема не самого IStream а настройки секурити, при callback вызовах...
... << RSDN@Home 1.1.4 beta 4 rev. 303>>
Народная мудрось
всем все никому ничего(с).
Re[4]: Подскажите, какой нужен тип для передачи двоичных дан
От: George Seryakov Россия  
Дата: 27.09.06 14:57
Оценка: 5 (2)
Здравствуйте, Left2, Вы писали:

Tom>>>IStream* | BSTR


GS>>Ой. Самые негативные впечатления об IStream. То есть работает, и можно передавать сверхбольшие данные и читать их выборочно, но при межпроцессном и межмашинном вызове можно так налететь на ограничение доступа...


L>Интересно, а можно подробнее?


http://rsdn.ru/Forum/?mid=36064
Автор: George_Seryakov
Дата: 15.03.02

http://rsdn.ru/Forum/?mid=86443
Автор: George Seryakov
Дата: 18.08.02
GS
Массив байт из COM в C#
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 27.09.06 16:53
Оценка: 11 (2)
#Имя: FAQ.combytes.to.cs
Здравствуйте, <Аноним>, Вы писали:

А>Подскажите, какой нужен тип для передачи двоичных данных в COM-e, чтобы использовался стандартный маршалинг.

А>И как эту функцию можно поюзать, например в C#.

COM:

[id(1), helpstring("method GetBinary")] HRESULT GetBinary([out,retval] SAFEARRAY(BYTE) *arr);

STDMETHODIMP CTestInterface::GetBinary(SAFEARRAY* *arr)
{
   BYTE src[] = {1,2,3,4,5,6,7,8,9,10,11};
   LPVOID theBytes = NULL;

   CComSafeArray<BYTE> NewArray(sizeof(src));
   SafeArrayAccessData( *NewArray.GetSafeArrayPtr(), &theBytes );
   memcpy( theBytes, src, sizeof(src) );
   SafeArrayUnaccessData( *NewArray.GetSafeArrayPtr() );

   *arr = NewArray.Detach();

   return S_OK;
}

C#:
tlbimp comserver.dll /out:comservernet.dll

using comservernet;

...
  TestInterface testobj = new TestInterface();
  byte[] arr = testobj.GetBinary();
... << RSDN@Home 1.2.0 alpha rev. 654>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.