接口方法调用问题(50分)

  • 主题发起人 主题发起人 xiaolinj79
  • 开始时间 开始时间
X

xiaolinj79

Unregistered / Unconfirmed
GUEST, unregistred user!
COM的dll,构造模式如下Active Library+Active Server Object
接口方法如下:
function TMYADOFuc.MYSQL(const sSQL: WideString): OleVariant;
var
MyADOConnection:VARIANT;
MyRecordSet:VARIANT;
begin
MyADOConnection:=CreateOleObject ('ADODB.Connection');
MyADOConnection.Open('Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=SDMS;Data Source=BH');
MyRecordSet:=CreateOleObject ('ADODB.RecordSet');
MyRecordSet.Open(sSQL,MyADOConnection);
result:=MyRecordset;
end;
在delphi中使用Import Library 将注册过的dll加如一个测试程序可以使用该函数
但是,如果在asp中使用,语句如下
<html>
<head>
<title>无标题文档</title>
<meta http-equiv="Content-Type" content="text/html;
charset=gb2312">
</head>
<% session.timeout=1 %>
<body bgcolor="#FFFFFF" text="#000000">
<% 'on error resume next
set comcn=server.createobject("MYADODLL.MYADOFuc")
y= "select * from Tbl_UseHead"
x= comcn.MYSQL(y)
%>
<% =x %>
</body>
</html>
那么就会有如下错误提示
错误类型:
MYADODLL.MYADOFuc (0x80040E4D)
/bh/dilphitest.asp, 第 12 行
就是 x= comcn.MYSQL(y) 这一行
理论上说,COM的dll在asp中是可以调用的
实际上set comcn=server.createobject("MYADODLL.MYADOFuc")语句也成功创建了COM对象
经过我的分析和调试,发现带open的语句在asp中不能使用,否则就会报如上错误
我的分析办法很傻,从函数的语句最后一条开始注释掉
一条条的往上,看asp能否调用函数
结果发现单单执行sql语句没有任何问题
但是如果需要用到open返回数据集,例如使用RecordCount那么asp就报错
有哪位高手能指点一下?我实在没办法了:(
分好象少了点,但是我已经倾其所有了
 
在DLL中使用COM对象前,都必须调用
CoInitialize(nil);
而它必须跟CoUninitialize配对使用。
你可以
CoInitialize(nil);
try
...//这里干你要干的事
finally
CoUninitialize;
end;
但,老兄你在DELPHI做的DLL中不用ADO组件而是自己在这里这样写,实在是想不通。
 
我也想使用ADO控件啊,但是怕ASP不支持,就改成自己写了
我的主要目的是要使用ASP来调用Delphi写的中间层
当然,如果用Delphi自己写的客户端就不用那么麻烦了
不知道兄台有什么高招?
 
高招说不上,但一般应该用DELPHI来做ASP对象,用ASP脚本来调用它就行了。
DELPHI中的ASP对象可以使用任何DELPHI组件,包括ADO,比如
MyADOConnection:=CreateOleObject ('ADODB.Connection');
MyADOConnection.Open('Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=SDMS;Data Source=BH');
...
就可以改成
with TADODataSet.Create(nil)do
try
ConnctionString := 'Provider=SQLOLEDB.1;Integrated ...
CommandText := sSQL;
Open;
... ...这里做你想在ASP中取得_RecordSet后做的事
finally
Free;
end;
...当然了,接口方法就不能输出_RecordSet了。
其它要注意的就是我上个回复说的了。
 
最后问一下,用Delphi构造ASP对象的模式
是不是用Active Server Object啊
兄台给个简单的返回数据集的例子好吗?
ghostxiaolin@21cn.com
 
我也要一个bill.robin@263.net
 
最近忙于工作,好几天没有上来了
分给你吧
不过,希望给个例子给我啊
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部