| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1841 人关注过本帖
标题:根据dll名(字符串),如何定义DLL对象
只看楼主 加入收藏
yefalai
Rank: 2
等 级:论坛游民
帖 子:20
专家分:10
注 册:2010-8-12
收藏
得分:0 
根据你写的, 似乎是说CreateObject(class,[servername]) 中的class必须现在系统中引用.
否则不能创建.

我的意思是 可以不可以不先引用,直接根据CLASS的名称,创建个实例.
2010-08-16 14:05
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:3 
这个问题,我一直在观望.
我不记得可以根据 DLL名字 就能创建 ActiveX  对象的.所以一直没办法回答

CreateObject 必须是 ActiveX  类的名字.并且这个DLL ,还必须是注册过了的.

------------------------------------
换个思路,
如果你知道这个DLL里包含的 ActiveX  的名字。那么是不是可以
在程序里先注册这 DLL ,然后创建这个 ActiveX  的对象呢??

授人于鱼,不如授人于渔
早已停用QQ了
2010-08-16 16:16
yefalai
Rank: 2
等 级:论坛游民
帖 子:20
专家分:10
注 册:2010-8-12
收藏
得分:0 
呵呵,谢谢你的关注.

你说的在程序里注册,应该是:
   1.在程序里先引用
   2.用Declare方法直接在程序块中申明引用.

这两种方法,我尝试都是可以的.
我是想问,有没有其他方法直接根据DLL里包含的ActiveX的名字(注意此名称为字符串形式)来调用.

其实我主要是想把所有系统功能,独立分成一个个DLL对象. 如果通过引用的形式,主窗体程序代码就得做大量的引用.
所以我就是想问问,是否可以直接通过DLL对象的名称,直接创建对象.
2010-08-16 16:47
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
收藏
得分:0 
搜到一篇文章:不注册调用ActiveX Dll
http://www.

呵呵,貌似用到了vboost中的东西。
2010-08-16 17:02
yefalai
Rank: 2
等 级:论坛游民
帖 子:20
专家分:10
注 册:2010-8-12
收藏
得分:0 
谢谢楼上的.你提供的网页实例我看了,说实话挺难完全看懂.

里面说到的"不注册调用ActiveX Dll"主题,是强调不注册.而非我说的系统引用. 实例依然存
在"Private Declare Function DllGetClassObject Lib "dllDemo.dll" ( _
    rclsid As UUID, riid As UUID, ByRef ppv As Any) As Long"
这样的句子.

我就假设"ActiveX Dll"对象我已经在操作系统中注册了.我是否可以不通过 "工程-->引用-->选择
对象" 或者 "程序代码里 Declare 的方法" 这两种方法,根据对象名称而创建对象.

呵,我也查了很多网站资料, 貌似我太异想天开了. 我要的功能似乎根本不可能实现.

在挂一个晚上. 明天结帖拉!

谢谢大家拉!
2010-08-16 17:26
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4947
专家分:30084
注 册:2008-10-15
收藏
得分:0 
CreateObject 函数,
不要求    2.用Declare方法直接在程序块中申明引用.

只要求在 注册表里存在注册信息就可以了.

授人于鱼,不如授人于渔
早已停用QQ了
2010-08-16 17:50
yefalai
Rank: 2
等 级:论坛游民
帖 子:20
专家分:10
注 册:2010-8-12
收藏
得分:0 
以下是引用风吹过b在2010-8-16 17:50:05的发言:

CreateObject 函数,
不要求    2.用Declare方法直接在程序块中申明引用.

只要求在 注册表里存在注册信息就可以了.
不需要"用Declare方法直接在程序块中申明引用.",但需要在程序里"引用"吧.
我测试了下,注册后,如果不通过我上面说的两种方法引用,就会报错.
2010-08-17 10:27
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
收藏
得分:0 
只要注册了,就可以不引用,也不需要Declare(事实上,用VB创建的ActiveX Dll本身是不能用Declare的,除非在生成dll时经过某些特殊手段处理过),直接用CreateObject创建对象(当然,className得正确),后期绑定。
2010-08-17 12:00
yefalai
Rank: 2
等 级:论坛游民
帖 子:20
专家分:10
注 册:2010-8-12
收藏
得分:0 
註冊:regsvr32 /s  c:\Class02.dll 后

Private Sub Command1_Click()
    Dim sDll As String
    Dim cls2 As Object
    sDll = "Class02.dll"
    Set cls2 = CreateObject(sDll)
End Sub
执行后,报错.
图片附件: 游客没有浏览图片的权限,请 登录注册
2010-08-17 13:50
jiashie
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:237
专家分:999
注 册:2009-4-30
收藏
得分:0 
以下是引用yefalai在2010-8-17 13:50:30的发言:

註冊:regsvr32 /s  c:\Class02.dll 后

Private Sub Command1_Click()
    Dim sDll As String
    Dim cls2 As Object
    sDll = "Class02.dll"
    Set cls2 = CreateObject(sDll)
End Sub
执行后,报错.

,还是老问题,className不对。
2010-08-17 13:53
快速回复:根据dll名(字符串),如何定义DLL对象
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024565 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved