vc6下写好一个简单的支持dual接口的com组件, 并且已经注册
vb6下进行调用:Private Sub Command1_Click()Dim obj As New Simple2.FunMsgBox 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 不行??

解决方案 »

  1.   

    如果你要这样使用 Dim obj As New Simple2.Fun
    请先引用对应的类库,工程->引用搜索 早期绑定 & 晚期绑定
      

  2.   

    楼上的兄弟, 奇怪的就是我在工程->引用 中已经把Simple2 1.0 Type Library选上了啊, 运行时还是出现:
    Compile   error: 
    User-defined   type   not   defined
    这样的错误
      

  3.   

    说详细一点吧, 我是用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" 错误
      

  4.   

    估计你是引用了Simple2.lib,而没有成功引用;工程->引用->浏览->找到存放Simple2.dll的文件夹->Simple2.dll ->确定;
      

  5.   

    引用库文件只能CreateObject;
    想NEW一个实例的话,要引用DLL文件,让系统自己找对应的库文件
      

  6.   

    to toury:引用的是Simple2.dll, 还是出同样的问题!!
      

  7.   

    你是不是把Simple2.dll从VC6.0的DEBUG或RELEASE文件夹拷贝出来了?要拷贝出来的话,要把Simple2.dll和Simple2.lib两个文件一起拷贝出来放到新位置,然后再引用
      

  8.   

    "还是出同样的问题!! "===>你点VB6的"引用"检查一下,Simple2 1.0 Type Library是否已选中.
    估计是你认为已经选了,但实际上引用列表里没有
      

  9.   

    toury:2个文件都在Debug目录中放, 没有拷贝出来; 而且引用中确实选中了
    Simple2 1.0 Type Library 真是奇怪, 还是老错误
      

  10.   

    问题解决了!! 过程如下:我在vb的"对象浏览器"中没找到Simple2.Fun对象, 反而找到了Fun对象, 于是用:Dim obj As New Fun这一句, 居然成功运行了!呵呵,莫非VB中用New语句创建对象的参数和CreateObject的参数还不一样CreateObject
    可以使用(Simple2.Fun)或者(Simple2.Fun.1)这样的参数而且不添加引用就能运行但用New的话, 直接指明接口(Fun)才能用(不能用Simple2.Fun这样的形式)
      

  11.   

    正常情况下对象浏览器应该可以显示Simple2这个命名空间的;我按照你的simple2也做了一个VC6测试类FUN,在对象浏览器中是有SIMPLE2Lib这个命名空间,可以:Dim   obj   As   New SIMPLE2Lib.Fun;
    或许用ATL创建时选择的方式不同吧,我没用聚合,呵呵.
    但问题解决了就好,恭喜