关于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,然后把这一组VARIANT做成SAFEARRAY,接收端,再反过来操作
本人深知这是一个非常简单的问题,但是网上找了半天没有找到合适的文档只有不耻下问。
简单描述下我发送端
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,然后把这一组VARIANT做成SAFEARRAY,接收端,再反过来操作