在vbscript中使用ATL COM中返回safearray参数,报错,不知道为什么,附代码,大家研究一下

maximin 2003-04-11 05:33:42
大致如下
vbscript:
<%
dim arr
set obj = server.createobject("atltest.com1")
arr = obj.test1 //此处脚本不认识SAFEARRAY类型的variant,why???????
%>

atl com代码如下:
stdmethodimp CCom1::test1(VARIANT *pVal)//pVal [out,retval]
{
VariantInit(pval);
pVal->vt = vt_array|vt_i4;
SAFEARRAY *psa;
.....
pVal->parray = psa;
}

页面运行报错: 答复对象遇到未处理的数据类型

我知道VBSCRIPT的VARIANT没有SAFEARRAY类型,但我看到MSDN中IRequest::BinaryRead
函数可以返回SAFEARRAY类型的值,不知道他是如何实现的。
到底如何在VBCRIPT返回一个SAFEARRAY类型的VARIANT的值,请大家帮帮忙。
...全文
66 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
h263plus 2003-04-15
  • 打赏
  • 举报
回复
To:maximin (风流周党)
1、据我所试(还没有理论依据),从COM中返回的数组无法在无类型语言中调用,例如VBScipts。在VB中则可以
2、返回一个数组好像不是你这么写的。例子在MSDN中有,写得很详细。我依据这个例子写了一些代码,包括返回简单数据类型的和返回自定义类型的(例如自定义的STRUCT),在VC、VB中调用通过。

To:languiwen(滥)
这种现象似乎也是"无类型语言"惹的祸。
如果必须用结构体作方法参数或属性,就不得不将此结构体包装成接口。
如果要用结构体的数组作参数或属性,那么就不得不实现COLLECTION。

以上方法用VC实现COM,在VC,VB,VBSCRIPTS(ASP)中调试通过


DavidBone 2003-04-14
  • 打赏
  • 举报
回复
ding
languiwen 2003-04-13
  • 打赏
  • 举报
回复
我也很烦。
我自己在IDL中定义了一个结构体,定义了一个结构体,在VB中可以读取
结构体中的成员 ,但在Visual InterDev中的ASP代码中 却无法获取 ,是为什么呢?

3,248

社区成员

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

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