vb6, 动态载入vb写的ActiveX DLL... 但重新编译DLL后就载不进来了.

qwer20000 2009-06-27 03:57:54
用VB6写了个ActiveX DLL,接着动态引用进来...

Dim myABC as Object
Set myABC = CreateObject("ABC.abc_Class")
Debug.Print myABC.somestring

可是, 若回去重新编译ActiveX DLL,就算内容不变,
就再也无法载入了...

error: "ActiveX 元件无法产生物件"

非得手动引用才行!!

我都有记得用regsvr32注册DLL后才开始,可还不行啊,郁闷啊!!

那位大虾解解惑啊...
...全文
235 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiashie 2010-10-19
  • 打赏
  • 举报
回复
是不是 即使设置了版本兼容为工程兼容或二进制兼容,但在exe中引用时是直接在vb6 IDE的工程-》引用菜单中引用的,dll重编译后exe还是用不了?
只能用createObject来“动态引用”?
qwer20000 2009-06-27
  • 打赏
  • 举报
回复
成功了!! 谢谢!
动态引用:
Dim myABC as Object
Set myABC = CreateObject("ABC.abc_Class")

打开DLL.
点击 菜单 工程=>工程属性=>部件=>版本兼容=>选择前面的DLL.

谢谢各位!
qwer20000 2009-06-27
  • 打赏
  • 举报
回复
谢谢您这么清楚的描述!!
试了好久, 应该是奏效了! (ActiveX 元件无法产生物件 警告 不见了!)

可是, 现在却出现: "...不支援Automation或预期的介面..."

这...
mhm0517 2009-06-27
  • 打赏
  • 举报
回复
说明白一点:
----------
因为对于同一个DLL,你在编译的时候,都会增加一个版本号的.
以说明这个DLL是前一个的升级版,即有更改过.
如果你没有声明版本兼容性,就会出错.
----------
比如说:
一般兼容只能向下兼容.即高版本的可以兼容低版本.
你用office 2003的部件. 但是你不装 office 2003 而装 95
那你就不能用.
但是如果你用office 95的部件,你装有2003 就可以用.
(但是不全是,如果2003中删除了部分95的功能,而这你在引用的时候用到了,就不能用了)

-----------------------
解决办法(可试一下,不保证一定成功):
进行VB6.0后.打开DLL.
点击 菜单 工程=>工程属性=>部件=>版本兼容=>选择前面的DLL.
lyserver 2009-06-27
  • 打赏
  • 举报
回复
设置工程属性为"工程兼容",否则,每编译一次,还得重新进行引用。
qwer20000 2009-06-27
  • 打赏
  • 举报
回复
我新编译DLL后 都用Regsvr32注册了啊....
为何不能引用呢?
qwer20000 2009-06-27
  • 打赏
  • 举报
回复
asftrhgjhkjlkttttttt:
谢谢!! 可我需要动态引用, 没法每次改DLL就再编译一次EXE.....

mhm0517:
DLL版本不同了... 所以?? (我是新手,还请指导下....)
mhm0517 2009-06-27
  • 打赏
  • 举报
回复
你不是说是重新编译吗?

得新编译后. ActiveX DLL 的版本就不同了.

不同的版本,当然会出现错误了.
孤独剑_LPZ 2009-06-27
  • 打赏
  • 举报
回复
可以这样,在引用里直接引用这个dll
代码上就可以这样写,形如
Dim sd As New MyComputer
qwer20000 2009-06-27
  • 打赏
  • 举报
回复
不行啊... 没这么宣告的啊(我是用VB6)
孤独剑_LPZ 2009-06-27
  • 打赏
  • 举报
回复
Dim myABC as Object 改为 Dim myABC as new Object 试试

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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