myfreemind 发表于 2003-12-22 23:20:00

DLL引用是不是只能用绝对路径??

在VBA中引用了一个DLL,路径比如为“d:\a\qq.dll",但如果把这个文件夹COPY到另一个盘,比如E盘,程序就没有办法运行了,发现引用只认绝对路径,这要怎么解决?

Taoyimaier 发表于 2003-12-22 23:53:00

刚才给你写了一个比较长得帖子,发表时,失败了,气死我了,
现在再来。
我说得是我得做法,别的我可能不太清楚,
一般来说,引用一个DLL,要将这个DLL在注册表中注册,让后调用,
注册办法,
将这个DLL文件拷贝到Windows目录下得System(system32,具体我不太清楚了,那个目录下得DLL,ocx文件多,就是哪一个目录),让后打开MS-DOS窗口,进入该目录下,运行regscv32 filename.dll即回收到成功注册得信息,让后你到VBA里的'引用'选项下,找到那个注册得DLL,就可以利用找个DLL的函数了
我以前做过一个DLL,用VLisp引用,可以达到目的(成功),但是,用该DLL的函数时,该函数没有着色,不象引用ARX舒服,
用VBA应用的估计会有 一些 提示(不知道怎么描述,呵呵)的功能
现在好久没有上明经了,游戏,明经,鱼肉,熊掌 。。。。。。。
等游戏玩溺了,我会回来的,版主不要删掉我得帐号啊
先复制一下,不要又。。。。

myfreemind 发表于 2003-12-23 18:17:00

你也是太久没有来了,VC学的怎么样了?

如果不放到系统目录行不行,因为比如我放到98下的system,但别人用的是2000,可能又没有办法用了!

mikewolf2k 发表于 2003-12-23 18:54:00

2楼兄,太谢谢你的方法了.继续请教一下,vlisp中怎样调用vb编的dll?

Taoyimaier 发表于 2003-12-24 00:15:00

首先说一下myfreemind的东西,
凭我的认识,如果DLL注册,DLL是一个系统的资源,任何程序开发语言都可以引用它,当让,要这种语言支持引用组件,比如Autolisp就不行,而Visuallisp可以,不注册它只是一个文件,不能完全算是系统的资源,就只是一个文件(我认为),这就是为什么有时候别人的VB程序放在自己的机器上打开时,说没有控件(组件),就是因为你没有或者没有注册那个控件(组件),你可以通过安装他的打包文件来实现控件(组件)的安装
最后一句话,没有注册过得DLL不能算是真真有意义的DLL,
如果你想要别人的机器用你得DLL,你也要将他的机器注册你得DLL,这是我的三次写这个东西,还是觉得没有怎么写好,不过找个问题不难,你可以多是一下,让后自然就清楚了,
回答一下你得问题,我得VC学得非常的。。。不怎么好,因为时间在游戏,学的一点东西又忘了,我学习的时候,回长来明经问大家的,呵呵
和我同一个头像的麦克狼兄弟,你得问题一下子说不清楚,那个程序在单位,如果我没有删掉,明天给你传上来,当时是因为Vlisp不能做对话框文件(我不喜欢用DCL,难得去学),所以想到用Vlisp调用VB编译过得调用DialogBox的DLL是一下,结果成功了,高兴了以上午,认为VLisp真好,让后感觉它不能着色,于是想去学习ARX,我就是喜欢乱来,哈哈哈

leeyeafu 发表于 2003-12-24 09:34:00

TAO兄说得很好,我补充一下他记不清楚的

1、Windows的系统目录在Win95\98\Me系统中是windows\system,在NT内核的操作系统,如win NT\2000\XP系统中是windows\system32,因为这两个都存在,不是TAO兄记不清楚了。
2、在VBA或者ARX代码中显式地声明DLL资源,只是在VBA或者ARX工程中使用这些资源,DLL不能成为windows系统资源,只有用TAO兄介绍的方法注册为windows系统资源才能真正成为各种编程语言共享的资源。
3、将DLL注册为windows资源后,VBA中不必再Declare DLL资源,可以选择“工具”->“引用”选项引用这些资源。
4、VLISP引用DLL资源应该没有VBA方便,TAO兄何不专门写个帖子介绍?

myfreemind 发表于 2003-12-24 12:01:00

是啊,TAO写个有时间的话写个详细点的帖子嘛

efan2000 发表于 2003-12-24 12:40:00

DLL分两种,一种是标准的DLL,另一种是ActiveX DLL。
标准的DLL不需要注册,比如系统的API就是这样,只能程序能查找到它所在的路径就行,使用时必须使用Declare声明才行。
AcitveX DLL,就如VB中创建的,必须注册,注册方法可以通过打包安装、使用Regsvr32,或者第三方组件来注册。使用时一般要先引用,然后通用New或者CreateObject来创建对象的实例。

mikewolf2k 发表于 2003-12-24 19:07:00

Taoyimaier大虾,我主要是出于保密的原因,想用vb编成activex dll,然后用lsp调用(别的语言基本不会).
另外关于这方面的相关知识,比如如何制作安装包等等,如果知道也请一并赐教.

Taoyimaier 发表于 2003-12-24 22:06:00

首先,请不要叫我大侠,我,一介山野村夫,呵呵,上面的Efan和Lee绝对是两位人物,比较不幸的告诉你,那个本来在单位程序,我可能重新安装机器的时候,没有保存,给格式化了,其实那个程序并不是很难,我只是测试一下VLisp有没有这个功能,当时,我也是在明经的二次开发栏目里发现了这个技术的文章,到单位上试验了一下,现在部分东西都忘掉了,本来打算将那篇文章给你的,但是现在没有找到,所以打算明天写一点相关的东西把,年底工作又很多,我要抓紧时间,还有,我说得都是我得一些看法,可能有些地方不够全面和准确,希望版主门提出来,不要让一些错误的思想灌输到大家的头脑里去了,看明天晚上我能不能高出来,
页: [1] 2
查看完整版本: DLL引用是不是只能用绝对路径??