定义接口方法时,如何定义数组类型

liuliguo940 2003-10-20 10:08:31
定义接口方法时,如何定义数组类型(short类型)
...全文
314 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyong310 2003-10-21
  • 打赏
  • 举报
回复
你肯定是用来IDIspatch作为基接口,size_is不能出现在tlb中,只能出现在oicf中,所以标准列集不能处理size_is,而oleautomation使用的是标准列集,所以冲突了,如果你不是非得从IDispatch继承的话,可以从IUnknown继承,这样就没有问题了.
liuliguo940 2003-10-21
  • 打赏
  • 举报
回复
老兄
再请教一个问题
当按你的方法做以后
出现
warning MIDL2039 : interface does not conform to [oleautomation] attribute : [ Parameter 'a' of Procedure 'Proc1' ( Interface 'INet' ) ]
警告如何处理
zyong310 2003-10-21
  • 打赏
  • 举报
回复
如果客户端是C++和C的话,可以用数组类型,比如:[in,size_is(20)]int p[]来定义一个p[20]的数组,也可以定义一个指针类型[in,size_is(20)]int* p来定义一个指向20个int的指针,这样MIDL就能正确的列集和散集。
ProgrameMan 2003-10-21
  • 打赏
  • 举报
回复
因为你是IDispatch作为基接口
所以这样定义

[id(1), helpstring("method Ontt")] HRESULT Ontt([in]int iProType, [in]VARIANT Parames);
Parames为数组变量

在VC中
_bstr_t tt;
tt="into the param it";

HRESULT hr=S_OK;
long lStartBound =0;
long lEndBound = 2;

hr = SafeArrayGetLBound(Parames.parray, 1, &lStartBound);
hr = SafeArrayGetUBound(Parames.parray, 1, &lEndBound);

short p[30] = {0};

for(long iIndex = lStartBound; iIndex <= lEndBound; iIndex ++)
{

VARIANT varFlavor;
VariantInit(&varFlavor);

hr = SafeArrayGetElement(Parames.parray,&iIndex, &varFlavor);
if(hr != S_OK)
{
tt="error,can't find the value";
}
if(varFlavor.vt == VT_I4 )
{
long lsz = varFlavor.lVal;
}
if(varFlavor.vt == VT_I2 )
{
short lsz1 = varFlavor.iVal;
}

if(varFlavor.vt == VT_BSTR )
{
_bstr_t bstrOut(varFlavor.bstrVal);
CComVariant variantFlavor(SysAllocString(varFlavor.bstrVal));
//SafeArrayPutElement(pOutArray,&iIndex,&variantFlavor);

tt= bstrOut;
}

}


return S_OK;
}
liuliguo940 2003-10-21
  • 打赏
  • 举报
回复
能否我的详细一些
最好有示例
谢谢
XXandOO 2003-10-21
  • 打赏
  • 举报
回复
传入参数用VARIANT,传出参数用VARIANT*,搞定!
liuliguo940 2003-10-21
  • 打赏
  • 举报
回复
老兄
你说的太对了
是IDIspatch作为基接口

我非得从IDispatch继承
该如何处理?
qwedcxza 2003-10-20
  • 打赏
  • 举报
回复
使用 VARIANT 定义
然后用 VARIANT 中的 parray,是一个 SAFEARRAY, 你需要了解 SAFEARRAY 的用法

3,245

社区成员

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

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