关于VARIANT结构互转的有关问题

关于VARIANT结构互转的问题
  本人深知这是一个非常简单的问题,但是网上找了半天没有找到合适的文档只有不耻下问。
简单描述下我发送端

void CDSanCeDan::TestOnSize()
{
struct _Info 
{
int cx;
int cy;
};

_Info* info = new _Info;
info->cx = 100;
info->cy = 100;

VARIANT v;
V_VT(&v) = VT_BSTR;
V_BSTR(&v) = SysAllocStringByteLen((char*)&info, (UINT)sizeof(info));

static BYTE parms[] = VTS_BSTR;
BOOL result = false; 
InvokeHelper(0x8, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms,&v); 
}

描述下我的接收端
VARIANT_BOOL CSanCeDanCtrl::Fx_SetSize(VARIANT* _strct)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());

// TODO: Add your dispatch handler code here
struct _Info
{
int cx;
int cy;
};
VARIANT* pv = _strct;
_Info* pinfo = (_Info*)V_BSTR(pv); 

if (m_ptrMainFrame->Fx_SetSize(pinfo->cx,pinfo->cy))
{
return VARIANT_TRUE;
}

return VARIANT_FALSE;
}

我不知道是哪里出了问题 在我接收到数据 数据不正确 请高手给与帮助,万分感谢!满分答谢~

------解决方案--------------------
VARIANT vr;
vr.vt = VT_RECORD; //表明自定义类型
vr.pvRecord = (PVOID)info; //指向实际数据

static BYTE parms[] = VTS_PVARIANT;
BOOL result = false; 
InvokeHelper(0x8, DISPATCH_METHOD, VT_BOOL, (void*)&result, parms,&vr); 
你试着将指针传过去 在那边的pvrecord再转回来看看。
------解决方案--------------------
引用:
引用:_variant_t UserName;

CString strUserName = (TCHAR*)_bstr_t(UserName);
哥们这句是转成string的啊 我是要转结构,貌似你的答案跟我提问不符合啊。

你要转结构体,应该把结构体里面的元素拆开,做成一个个数组的元素,每个给VARIANT,然后把这一组VARIANT做成SAFEARRAY,接收端,再反过来操作