To:Jimy() 关于COM过程调用的回复(一个COM的常见错误的解决方法)

hydnoahark 2001-07-21 05:46:37
From:Jimy() 
感谢blueray(蓝色射线),tripofdream(梦之旅),i_need_mana(小岭)和hydnoahark(诺亚方舟)!
谢谢大家!
这个问题解决了,但是我的问题还没有解决!!!
真正的问题是:
=================
这个过程是用其他语言编写的asp控件,但我在asp中调用时却出错!
我也象 call abc(a,b)一样去调用它,
结果却返回一个错误:Type mismatch!

Dim iwidth,iheight
s="test.gif"
call PictureSize(s,iwidth,iheight) <==这句话本要返回一图片的宽和高,但是出错!
==========
而PictureSize是控件的一个子过程
还请大家看看是什么原因出错,谢谢!

Form:hydnoahark
这个应该是VB的一个Bug或者说是ASP功能太弱的一个表现。你应该知道,在ASP中是没有数据类型的概念的(如int,long等),而在VB中我们可以明确定义一个数据的类型,这样在COM与ASP之间传递参数的时候就出现了一个问题。假如在COM中我们定义一个返回参数为Long,但当我们在ASP中调用这个参数的时候,ASP并不能分辨Long到底是什么类型,所以就会返回Type mismatch的错误。
解决的方法很简单,就是在COM中我们定义这些参数的类型为Variant即可。
一个例子:
COM代码:
Public Sub Test(ByRef a As Variant, ByRef b As Variant)
a = 1
b = 2

End Sub

Public Sub Test2(ByRef a As Long, ByRef b As Long)
a = 1
b = 2

End Sub

ASP代码:
Set a = CreateObject("xxx.xxx")
call a.test(x,y) '成功
response.write x
response.write "<BR>"
response.write y

call a.test2(x,y) '出错Type mismatch
response.write x
response.write "<BR>"
response.write y
...全文
59 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
hydnoahark 2001-07-22
  • 打赏
  • 举报
回复
up

1,649

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 非技术类
社区管理员
  • 非技术类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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