关于COM接口传出参数VARIANT的问题?

hbjxx638 2011-07-02 11:01:43
我定义了一个ActiveX的接口,如 GetHistoryData(VARIANT* varValue),varValue是一个传出的参数,我想知道内部实现是不是有问题,实现如下
GetHistoryData(VARIANT* varValue)
{
......
SAFEARRAYBOUND bound[1];
bound[0].lLbound=0;
bound[0].cElements=2;
SAFEARRAY* pArray=SafeArrayCreate(VT_I4,1,bound);

// Get value
......

varValue->vt = VT_ARRAY|VT_VARIANT;
varValue->parray = pArray;
}
我在外面调用的时候,数组的元素个数为0,是不是这个实现有问题,请高手指教?
...全文
104 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
oyljerry 2011-07-03
  • 打赏
  • 举报
回复
你要保证你返回的指针数据在函数调用返回时还是有效的。
MoXiaoRab 2011-07-03
  • 打赏
  • 举报
回复
是这样写的么?

VARIANT *varValue;
varValue= new VARIANT;
VariantInit(varValue);

MoXiaoRab 2011-07-03
  • 打赏
  • 举报
回复
// Get value
......//中间这段你对varValue初始化怎么写的
varValue->vt = VT_ARRAY|VT_VARIANT;
hbjxx638 2011-07-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tr0j4n 的回复:]

是这样写的么?
C/C++ code

VARIANT *varValue;
varValue= new VARIANT;
VariantInit(varValue);
[/Quote]
初始化是在调用这个方法之前,先初始化,再传参
hbjxx638 2011-07-03
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 oyljerry 的回复:]

你要保证你返回的指针数据在函数调用返回时还是有效的。
[/Quote]
怎么保证,能详细讲讲吗
hbjxx638 2011-07-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 gw_net 的回复:]

make sure you addref before you return
[/Quote]
这个不是只能指针,怎么addref?
gw_net 2011-07-03
  • 打赏
  • 举报
回复
make sure you addref before you return

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧