vb6调用vc6写的com组件运行出错, 请教解决方法

redex 2007-11-16 03:26:43
vc6下写好一个简单的支持dual接口的com组件, 并且已经注册
vb6下进行调用:

Private Sub Command1_Click()

Dim obj As New Simple2.Fun

MsgBox obj.Add(10, 22)

End Sub


出错, 错误信息:
Compile error:
User-defined type not defined

如果把
Dim obj As New Simple2.Fun 换成
Set obj = CreateObject("Simple2.Fun")

则可以正常调用, 不明白的是为什么
Dim obj As New Simple2.Fun 不行??
...全文
119 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
redex 2007-11-18
  • 打赏
  • 举报
回复
说详细一点吧, 我是用vc6的ATL创建一个简单com组件: Simple2.dll
在vc中编译组件时已经注册到注册表里去了, 并且我到注册表中去查看, 确实有
相关信息

在vb6中, 我也把"工程-引用"中的 Simple2 1.0 Type Library 选中了
但在vb中调用时, 还是只能用

Set obj= CreateObject("Simple2.Fun") 这种写法, 即在这种写法下
程序工作正常, 可以调用com组件中的方法

而用
Dim obj As New Simple2.Fun
的话就会出现"User-defined type not defined" 错误
redex 2007-11-18
  • 打赏
  • 举报
回复
多谢诸位兄弟支持!!
toury 2007-11-18
  • 打赏
  • 举报
回复
引用库文件只能CreateObject;
想NEW一个实例的话,要引用DLL文件,让系统自己找对应的库文件
toury 2007-11-18
  • 打赏
  • 举报
回复
估计你是引用了Simple2.lib,而没有成功引用;

工程->引用->浏览->找到存放Simple2.dll的文件夹->Simple2.dll ->确定;

嗷嗷叫的老马 2007-11-18
  • 打赏
  • 举报
回复
纯帮顶~~~~~~~~~~~~~~
toury 2007-11-18
  • 打赏
  • 举报
回复
正常情况下对象浏览器应该可以显示Simple2这个命名空间的;我按照你的simple2也做了一个VC6测试类FUN,在对象浏览器中是有SIMPLE2Lib这个命名空间,可以:Dim obj As New SIMPLE2Lib.Fun;
或许用ATL创建时选择的方式不同吧,我没用聚合,呵呵.
但问题解决了就好,恭喜
redex 2007-11-18
  • 打赏
  • 举报
回复
问题解决了!! 过程如下:

我在vb的"对象浏览器"中没找到Simple2.Fun对象, 反而找到了Fun对象, 于是用:

Dim obj As New Fun

这一句, 居然成功运行了!

呵呵,莫非VB中用New语句创建对象的参数和CreateObject的参数还不一样CreateObject
可以使用(Simple2.Fun)或者(Simple2.Fun.1)这样的参数而且不添加引用就能运行

但用New的话, 直接指明接口(Fun)才能用(不能用Simple2.Fun这样的形式)
redex 2007-11-18
  • 打赏
  • 举报
回复
toury:

2个文件都在Debug目录中放, 没有拷贝出来; 而且引用中确实选中了
Simple2 1.0 Type Library 真是奇怪, 还是老错误
toury 2007-11-18
  • 打赏
  • 举报
回复
"还是出同样的问题!! "===>你点VB6的"引用"检查一下,Simple2 1.0 Type Library是否已选中.
估计是你认为已经选了,但实际上引用列表里没有
toury 2007-11-18
  • 打赏
  • 举报
回复
你是不是把Simple2.dll从VC6.0的DEBUG或RELEASE文件夹拷贝出来了?要拷贝出来的话,要把Simple2.dll和Simple2.lib两个文件一起拷贝出来放到新位置,然后再引用
redex 2007-11-18
  • 打赏
  • 举报
回复
to toury:

引用的是Simple2.dll, 还是出同样的问题!!
redex 2007-11-16
  • 打赏
  • 举报
回复
up
redex 2007-11-16
  • 打赏
  • 举报
回复
楼上的兄弟, 奇怪的就是我在工程->引用 中已经把

Simple2 1.0 Type Library

选上了啊, 运行时还是出现:
Compile error:
User-defined type not defined
这样的错误
fj182 2007-11-16
  • 打赏
  • 举报
回复
如果你要这样使用 Dim obj As New Simple2.Fun
请先引用对应的类库,工程->引用

搜索 早期绑定 & 晚期绑定

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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