COM IStream из System.IO.Stream
От: OlegV Украина  
Дата: 19.03.03 12:54
Оценка:
У меня есть win32 Dll модули с одинаковыми экспортируемыми функциями Decode и Encode, в качестве параметра в них передается указатель на на COM IStream интерфейс:
long Decode(long data, IStream* pStream);  // читает из потока данные
long Encode(long data, IStream* pStream); // записывает в поток данные

Мне необходимо написать .NET Managed интерфейс и от этого интерфейса пронаследовать Managed классы, которые будут вызывать функции одного из этих Dll модулей.
__gc __interface IFC 
{ 
    long Decode(Stream s);
    long Encode(Stream s);
};

__gc class В : IFC
{
public:
    long Decode(Stream s);
    long Encode(Stream s);
protected:
    long data;
};

Основная проблема — маршалинг System.IO.Stream класса в COM IStream.
В MSDN-е я нарыл только Marchal.GetComInterfaceForObject метод, и UCOMIStream класс, причем очень скудно описано, нет примеров.
В MarshalAsAttribute также ничего про потоки не нашел (
Может у кого-то есть положительный опыт маршалинга System.IO.Stream -> COM IStream ?

Переделывать или обрамлять Dll-ки в COM классы я не хочу.
Re: COM IStream из System.IO.Stream
От: ВованЯ  
Дата: 19.03.03 14:07
Оценка:
Здравствуйте, OlegV, Вы писали:
посмотри, может быть это поможет:
HOW TO: Wrap a UCOMIStream in a Stream Class
This article was previously published under Q321340
здесь
С уважением, Владимир
Re[2]: COM IStream из System.IO.Stream
От: OlegV Украина  
Дата: 19.03.03 14:35
Оценка:
Этот пример я тоже нашел, но мне
нужно как раз обратное:
Wrap a Stream Class in a UCOMIStream interface.
Также в этом примере выполняется распределение временнго блока памяти и промежуточное копирование данных
при вызове методов read/write. Такой механизм хорош когда читаются маленькие порции данных, а если читаются большие ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.