在使用一个ocx控件时需要传递一个Variant类型的字符串数组,但不知道如何创建请高手指点一二,这里不胜感谢了.小弟在一个类的成员函数中写了以下语句来创建数组。SAFEARRAYBOUND rgsabound;
SAFEARRAY FAR* psa;
rgsabound.lLbound = 0;
rgsabound.cElements = 6;
psa = SafeArrayCreate(VT_BSTR,Dim,&rgsabound);if (psa != NULL)
{
m_var.parray = psa; //m_var是类中的一个成员变量
}问题如下:
(1)如果创建成功后,需不需要手动修改m_var.vt 项为VT_ARRAY | VT_BSTR
(2)当类实例析构后 m_var.para 所指向的数组需要释放吗?
(3)以上创建了一个包含6个元素的数组,如何给数组各项赋值
(4)有没有简单的方法创建数组(_Variant_T、COleVariant、COldSafeArray行不行)
SAFEARRAY FAR* psa;
rgsabound.lLbound = 0;
rgsabound.cElements = 6;
psa = SafeArrayCreate(VT_BSTR,Dim,&rgsabound);if (psa != NULL)
{
m_var.parray = psa; //m_var是类中的一个成员变量
}问题如下:
(1)如果创建成功后,需不需要手动修改m_var.vt 项为VT_ARRAY | VT_BSTR
(2)当类实例析构后 m_var.para 所指向的数组需要释放吗?
(3)以上创建了一个包含6个元素的数组,如何给数组各项赋值
(4)有没有简单的方法创建数组(_Variant_T、COleVariant、COldSafeArray行不行)
解决方案 »
- 测试题:OnOK()、OnCancel()、OnClose()、OnDestroy()之间的调用顺序,第一个回答正确者将获得30的奖励!
- 升星,散分
- jiangsheng 老大帮忙,Word控件问题
- 100分求问怎样向ListBox里输入内容
- 请问怎么让静态图片框能接收鼠标双击事件
- 如何拦截IE页面浮动广告?
- 谁能帮我去掉新建文件是VC自动出来的选择模板的小对话框,它实在很讨厌
- 怎样使自己编写的应用程序拥有多个ICON?
- 高手请进!!(52分)有关dll问题
- 做安装程序,自动注册dll和ocx怎么做呢?
- 请教一个修改注册表的奇怪的问题 为何修改的结果和要求的不一样?
- 请问:服务器互连和服务器集群到底有什么不同啊,
2.用SafeArrayDestroy释放
3.SafeArrayPutElement
4.照规矩办
{
unsigned int i;
HRESULT hresult;
VARIANT var;
SAFEARRAY * psa;
CEnumPoint * penum;
POINTLINK * ppointlink;
SAFEARRAYBOUND rgsabound[1];
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = m_cPoints; // Creating a SafeArray with 1 element.
psa = SafeArrayCreate(VT_VARIANT, 1, rgsabound);
if(psa == NULL){
hresult = ResultFromScode(E_OUTOFMEMORY);
goto LError0;
}
// Insert code to create item to be
// inserted into the safe array. V_VT(&var) = VT_DISPATCH;
hresult = ppointlink->ppoint->QueryInterface(
IID_IDispatch, (void **)&V_DISPATCH(&var));
if(hresult != NOERROR)
goto LError1; ix[0] = i;
SafeArrayPutElement(psa, ix, &var);
VariantClear(&var); ppointlink = ppointlink->next;
} hresult = CEnumPoint::Create(psa, &penum);
if(hresult != NOERROR)
goto LError1;
*ppenum = penum;
return NOERROR;LError1:;
SafeArrayDestroy(psa);LError0:;
return hresult;
}
Requirements
for (i = 0; i < 3; i++)
{
VariantInit(&vFlavors[i]);
V_VT(&vFlavors[i]) = VT_BSTR;
} V_BSTR(&vFlavors[0]) = SysAllocString(OLESTR("Vanilla"));
V_BSTR(&vFlavors[1]) = SysAllocString(OLESTR("Chocolate"));
V_BSTR(&vFlavors[2]) = SysAllocString(OLESTR("Espresso Chip")); long lZero = 0;
long lOne = 1;
long lTwo = 2; // Put Elements to the SafeArray:
hr = SafeArrayPutElement(psa, &lZero,&vFlavors[0]);
hr = SafeArrayPutElement(psa, &lOne,&vFlavors[1]);
hr = SafeArrayPutElement(psa, &lTwo,&vFlavors[2]);