200分的帖子,速度来围观啊
本想直接200分的,因为现在假期,我怕没有太多人上CSDN,先上50分,但是问题解决后,我直接另开一个帖子加送150分。
编译环境:VB6
虚拟服务器: win203,mts
客户端: windows 7 *64 旗舰版
在远程电脑上,我在ActiveX Dll和ActiveX exe组件中通过ADO组件访问数据库一直失败。
在Active Dll中,还能实例化对象,但是若是用connection中open连接就会报错。
在Active Exe中,都不能实例化对象了,直接报 “类不支持自动化“ 这个错。
我知道VB是基于COM的,ActiveX中有一个重要的接口,IDispatch接口,且这个接口方法的参数类型有限制,所以我在ActiveXExe中,定义的方法是public function GetLong() as long ,在方法体中,我用ado访问了一次数据库,最后给GetLong任意赋值返回。就导致不能实例化对象了。但是我若是去除Ado访问数据库的代码,就能远程实例化对象并正常调用方法。
请注意:我的dll或exe都是在远程虚拟服务器上的,并没有放在本地,若是访问本地的dll和exe都没有任何问题。
请各位回答我如下几个问题:
1.远程服务器上的DLL和Exe访问数据库时候有什么注意项。
2.用createobject时候,调用IDispatch接口和IUNKOWN接口的优先级问题,或者说是调用规则。
3.用new对象的时候,调用IDispatch接口和IUNKOWN接口的优先级问题,或者说是调用规则。
4.求服务器上能正常访问数据库的dll和exe代码例子。很简单的,只要能通过客户端调用就行。(我找到,但是都是在本地访问远程数据库服务器的例子)
[最优解释]
问题1、4
注意服务端、客户端之间传递的所有对象必须是可序列化的(比如 ADODB.RecordSet)。
服务端应该是无状态的,没有全局实例,所有内部对象必须在一次调用中创建并释放。
还有MTS组件要发布、安装到客户端使用。
4楼说的64位可能是个问题,自己找找微软的文档是否支持!
问题2、3
IUNKOWN 实现引用计数,IDispatch 实现后期绑定。
两者都有严格约定的行为模式,不可随意更改。
[其他解释]
该回复于2012-12-08 14:15:47被管理员删除
[其他解释]
该回复于2012-10-04 00:18:56被版主删除
[其他解释]
我只是被分数吸引进来的,看到没200分,洗洗睡了
[其他解释]
64位win7?为楼主感到担心……
[其他解释]
该回复于2012-10-08 13:04:22被版主删除
[其他解释]
如果你的目标机装了service pack 1,那一定要坚决地删掉
[其他解释]