Если вы хотите использовать необработанную структуру VARIANT , вы можете кодировать ее следующим образом:
VARIANT v;
VariantInit(&v);
pApp->AddRef();
v.pdispVal = pApp;
v.vt = VT_DISPATCH;
...
// later on, some code (this code or another code) will/should call this
VariantClear(&v); // implicitely calls pdispVal->Release();
Или, если вы используете среду разработки Visual Studio, то выможно просто использовать умные оболочки _variant_t или CComVariant (ATL), которые я рекомендую.В этом случае вы можете просто назвать это так:
IDispatch *pApp = ...
// both wrappers will call appropriate methods
// and will release what must be, when destroyed
CComVariant cv = pApp;
// or
_variant_t vt = pApp;
PS: не используйте оба класса-оболочки, сделайте свой выбор.Если в проекте используется ATL, я использую CComVariant
, в противном случае, например, _variant_t
.