ASP如何传递引用参数到DLL中?急!急!急!

panxin 2004-12-11 11:47:42
我在VB里面做了一个DLL,有一个接口如下:
public function ExportXLS(Byref rs as ADODB.Recordset,Byref aryFields() as String)

我在ASP调用代码如下:
dim rs,aryFields(),objDll
'----赋值过程-------------
objDll.ExportXLS(rs,aryFields)


运行后ASP出现错误:

Microsoft VBScript 运行时错误 错误 '800a000d'
类型不匹配: 'ExportXLS'

请问有办法解决吗?

...全文
242 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
aifox 2005-01-05
  • 打赏
  • 举报
回复
好贴!
收藏,现在开始了解一点dll了
^_^
kakalong 2004-12-13
  • 打赏
  • 举报
回复
收藏
尚和空四 2004-12-13
  • 打赏
  • 举报
回复
学习做
雄牛 2004-12-13
  • 打赏
  • 举报
回复
你无法在JavaScript中调用普通DLL,但可以使用new ActiveXObject调用ActiveX DLL,如:
<script>
set o = CreateObject( "WScript.Shell" )
o.Run( "command.com /c mkdir " + "c:\NewDir")
</script>
雄牛 2004-12-13
  • 打赏
  • 举报
回复
up
阿泰 2004-12-13
  • 打赏
  • 举报
回复
数据库的操作确实是直接写在COM+里的好

我觉得在COM+中尽可能不要封装HTML代码
也就是把页面表现和界面逻辑彻底分开,
这样的话rs做为传入传出参数有的时候就确实很需要了
比如要分页之类的
相比之下rs做为输入参数的场合会少些

数组虽然也基本可以实现rs的功能替代
但是对于大数据量的时候,rs效率会更高些,因为rs传输前自动进行了压缩
同样大小的数据记录,使用rs会减少网络数据流量
但是小数据就不合适,因为rs里还保存了个结构定义在里面


现在看到很多封装代码的dll
我认为com+主要是为了解决效率问题的,而不是为了来保护代码
有些代码封装起来后,大流量的时候效率反而更低


dsclub 2004-12-13
  • 打赏
  • 举报
回复
数据与视图应该是分离的

XML+XSLT是
XHTML+CSS是
VC的Doc/View也是
…………

这是个正确的思维,所以,COM用来处理的只是数据和逻辑,对于WEB页面那是CSS要做的事情。
panxin 2004-12-12
  • 打赏
  • 举报
回复
在ASP调用时不用在参数前加byref吧,我记得不用,加了以后连网页都显示不出来,直接报语法错误。郁闷!
在ASP中写一个byref的function,直接调用都可以,咋调用dll就不行呢
panxin 2004-12-12
  • 打赏
  • 举报
回复
不行,我试过了
阿泰 2004-12-12
  • 打赏
  • 举报
回复
VB中改成这样就行了
public function ExportXLS(Byref rs ,Byref aryFields)
明珠佩佩 2004-12-12
  • 打赏
  • 举报
回复
我尝试过在VB里面封装子过程

似乎效果也不错的

但比较麻烦点的是

对每个函数的输入和输出都需要单独编写接口程序
阿泰 2004-12-12
  • 打赏
  • 举报
回复
dsclub(兀儿 - 干部℡¨) 这么晚了还不睡,精神可嘉啊
有时间就写个基本的组件开发指南吧,呵呵

这个参数类型的问题已经被问过多次了 ^_^
dsclub 2004-12-12
  • 打赏
  • 举报
回复
还是VB用的不熟呀!
你这样写看看:

VB中:

Public Function ExportXLS(ByRef rs As Variant, ByRef aryFields As Variant) As String
ExportXLS = "RecordCount:" & rs.RecordCount & "aryFields Bounds:" & UBound(aryFields)
End Function


ASP中:
<%
Dim ObjCOM
Dim rs, con, ary(10)
Dim i

For i = 1 To 9
ary(i) = "你好"
Next
set con = server.CreateObject("ADODB.Connection")
con.connectionstring="Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + server.mappath("./db1.mdb")
' 设置好自己的数据库连接
con.open
set rs = server.CreateObject("ADODB.RecordSet")
rs.open "TB", con, 1, 3



set ObjCOM = server.CreateObject("CSDN.test1")'这里换成你自己的组件名称
Response.Write ObjCOM.ExportXLS(rs, ary)
set ObjCOM = nothing
rs.close
set rs = nothing
con.close
set con = nothing



%>


执行ASP页面的结果:
RecordCount:0aryFields Bounds:10

一切OK
dsclub 2004-12-12
  • 打赏
  • 举报
回复
不过我个人认为,这个问题的解决不应该是这样的。

传递RecordSet为什么呢?

之所以使用COM组件就是因为ASP的效率不佳,那么既然使用了组件,干脆数据库的工作都放到COM里实现,何必再在ASP写数据库挂接,然后再传递到组件里呢?而且,就我个人的经验感觉传递类型的指针始终不是个放心的事情。IIS和COM的进程工作方式决定了这种安全系数。
dsclub 2004-12-12
  • 打赏
  • 举报
回复
其实Online(龙卷风)早就写过了。

他在组件开发方面绝对是有所建树的。我也不好班门XX了

28,393

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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