C# и Com
От: Wild_boy Ниоткуда  
Дата: 11.07.03 12:58
Оценка: :)
Значит имеется такая проблема:
Есть COM сервер, которому необходимо передать объект типа VARIANT или типа него ( не знаю как это выглядит в C# ),
а затем из этого объекта необходиом получить поток. Есть аналогичный код на C++

void CCmdPaintToStream::_GetImage(IGDBThemePainter& painter, CCoreSetUrlI& outUrl) // exception
{
ASSERT(painter.m_lpDispatch); // must be already created

_variant_t varStream;

// m_eType filled in CCmdPaintBase::Execute

if (m_eType == eEMF)
painter.GetImage(ObjLand_Const::gdbImageStream, &varStream);
else
painter.GetImage(ObjLand_Const::gdbImageStreamBMP, &varStream);

ASSERT(varStream.vt == VT_UNKNOWN); // returned variant must be unknown interface
LPSTREAM pStream = 0;
TRY
{
HRESULT hRes = varStream.punkVal->QueryInterface(&pStream);
VRF_OS_ERROR(hRes == S_OK, hRes); // exception

outUrl.Set(QCommandSpecs::tempStream, pStream); // exception. Adds refcount of stream
pStream->Release();
}
CATCH_ALL(e)
{
if(pStream != 0)
pStream->Release();

THROW_LAST(); // exception
}
END_CATCH_ALL
}

Здесь IGDBThemePainter — COM объект
varStream — та самая переменная из которой надо получить поток
Как реализовать то же самое на C# ( .NET Framework Class Library )?

P.S. Извеняюсь если хреново всё это объяснил — сам нихрена не могу понять
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.