Я думаю, вы не понимаете семантику копирования и ссылок на C ++.Вот пример того, как вы можете использовать _variant_t вместо VARIANT в трех различных типах вызовов аргументов: копирование, ссылка, указатель.
#include <windows.h>
#include <comdef.h>
#include <iostream>
using namespace std;
void DoSomething(VARIANT v)
{
_variant_t vConv;
VariantChangeType(&vConv, &v, 0, VT_BSTR);
wcout << vConv.bstrVal << endl;
}
void DoSomethingWithRef(const VARIANT& v)
{
_variant_t vConv;
VariantChangeType(&vConv, &v, 0, VT_BSTR);
wcout << vConv.bstrVal << endl;
}
void DoSomethingWithPtr(const VARIANT* pv)
{
_variant_t vConv;
VariantChangeType(&vConv, pv, 0, VT_BSTR);
wcout << vConv.bstrVal << endl;
}
int main(int argc, char* argv[])
{
_variant_t v_t(123L);
DoSomething(v_t);
DoSomethingWithRef(v_t);
DoSomethingWithPtr(&v_t);
return 0;
}