Значит имеется такая проблема:
Есть 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. Извеняюсь если хреново всё это объяснил — сам нихрена не могу понять