Public Type cordAryTemp
    cord_x As Double
    cord_y As Double
    cord_h As Double
    colorDou As Double
End Type
这个是在模块中定义的,可以在其他模块或窗体中使用问题是,我现在想在一个类里也使用这个自定义类型,用来做函数的传递参数,或者变量,一直会出错找到类似的帖子,说是可以把这个自定义类型定义在类模块或公共模块, 供整个工程使用,烦请高手们给个详细的说明,最好给个例子说明在类中如何使用这个自定义类型谢谢!!

解决方案 »

  1.   

    如果那个类是前绑定的话,可以直接用,当然前提是Public定义,如果是后绑定的话,直接传数字进去,或者在工程里面定义一个跟它一摸一样的枚举
      

  2.   

    不用复制了.在类里面可以直接调用:
    Dim obj As New cordAryTemp
    obj.colorDou
      

  3.   

    也许我没表达清楚
    错误是出在类里的一个public函数用这个自定义类型作参数的情况下
      

  4.   

    MrQiu
     我不明白你说的邦定的意思,请说明白点好吗?
      

  5.   

    Public的Class按照COM标准,是“工程外”可见的;定义在模块中的结构仅仅是工程内可见,当然不能作为公共类的参数类型。
    必须将结构的定义从模块移动到公共类中。
      

  6.   

    Tiger_Zhao本人是vb菜鸟,请教公共类该如何定义?似乎类模块中不允许定义
    Public Type cordAryTemp 
        cord_x As Double 
        cord_y As Double 
        cord_h As Double 
        colorDou As Double 
    End Type 
      

  7.   

    工程也要是公共的(ActiveX Exe、ActiveX Dll等)。
    这样在类中声明的结构才可以编译到公共接口中。
    这样仅仅为了声明就会多出一个dll来,如果工程实在太小,用下面的方式变通:
    ·如果你会做TLB,那么在TLB中声明结构,VB工程中引用,没有任何变化。
    ·将结构转换为类,勉强可以在一个exe中实现,不过结构和类的不同需要注意。
      

  8.   

    请问 Tiger_Zhao     对于上面的问题,我把自定义类型写到ActiveX Dll中,问题得以解决了
         
         我是在exe中实现的,请问这样做是不是很不合理呢?     另外想问得是,你所说的变通方式,可否再说得详细一些?想好好学习下,一直都觉得自己没体会到vb的要领     非常感谢你!!
      

  9.   

    ActiveX Dll 是标准的做法,如果工程不大,却要多出一个基本属于空壳的dll,有要注册,有点不方便。
    tlb用VC编写就可以了,如果你能找到《Advance Visual Basic》附带的工具EditTLB.exe就更方便了。
    置于用class实现,纯属“可能的方案”,你置于将结构的属性定义到一个类中,安装类变量的调用方式使用就可以了。
      

  10.   

    找到一个生成tlb的方法,在Dll的<工程屬性>中選擇第四個選項<元件>,在<遠程伺服器>可選框中選中<遠程伺服器檔案>,再編譯此DLL工程,就會有這個文件了请问如果想使用这个自定义类型的时候,是引用这个dll还是引用tlb,或是两个都需要引用到工程呢?明白你的意思,有空我会试着用class实现看看呵呵  谢谢你咯
      

  11.   

    错误原因和解决办法基本上Tiger_Zhao都给出来了http://topic.csdn.net/t/20020322/15/593519.html
      

  12.   

    能不能变通一下,用内存地址来转换呢?我举个例子:
    '模块代码
    Public Type cordAryTemp 
        cord_x As Double 
        cord_y As Double 
        cord_h As Double 
        colorDou As Double 
    End TypePublic Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    'Class代码(TestCls[名称换成你自己的类名]):
    Public Function xxxx(TypeAdd As Long) As Long
        Dim cat As cordaryTemp
        Call CopyMemory(cat, ByVal TypeAdd, Len(cat))
        Debug.Print cat.cord_x, cat.cord_y, cat.cord_h, cat.colorDou
    End Function
    'Form代码
    Private Sub Form_Load()
        Dim cat As cordaryTemp
        Dim TypeAdd As Long
        Dim cls As New TestCls '名称换成你自己的类名
        With cat
            .cord_x = 1234
            .cord_y = 2345
            .cord_h = 3456
            .colorDou = 4567
        End With
        TypeAdd = VarPtr(cat)
        cls.xxxx TypeAdd
        Call CopyMemory(cls, 0&, 4) '清空cls对象
    End Sub以上代码测试成功,运行程序时“即时”窗口打印了自定义类型中变量的值
    不过不知道是不是楼主想要的效果
      

  13.   

    这也不失为一种方法,虽然有些冗余定义,不过不影响使用。
    如果仅需要使用声明的结构定义而不会创建dll中的任何类,那么只引用tlb就可以了。