Public Type cordAryTemp
cord_x As Double
cord_y As Double
cord_h As Double
colorDou As Double
End Type
这个是在模块中定义的,可以在其他模块或窗体中使用问题是,我现在想在一个类里也使用这个自定义类型,用来做函数的传递参数,或者变量,一直会出错找到类似的帖子,说是可以把这个自定义类型定义在类模块或公共模块, 供整个工程使用,烦请高手们给个详细的说明,最好给个例子说明在类中如何使用这个自定义类型谢谢!!
cord_x As Double
cord_y As Double
cord_h As Double
colorDou As Double
End Type
这个是在模块中定义的,可以在其他模块或窗体中使用问题是,我现在想在一个类里也使用这个自定义类型,用来做函数的传递参数,或者变量,一直会出错找到类似的帖子,说是可以把这个自定义类型定义在类模块或公共模块, 供整个工程使用,烦请高手们给个详细的说明,最好给个例子说明在类中如何使用这个自定义类型谢谢!!
Dim obj As New cordAryTemp
obj.colorDou
错误是出在类里的一个public函数用这个自定义类型作参数的情况下
我不明白你说的邦定的意思,请说明白点好吗?
必须将结构的定义从模块移动到公共类中。
Public Type cordAryTemp
cord_x As Double
cord_y As Double
cord_h As Double
colorDou As Double
End Type
这样在类中声明的结构才可以编译到公共接口中。
这样仅仅为了声明就会多出一个dll来,如果工程实在太小,用下面的方式变通:
·如果你会做TLB,那么在TLB中声明结构,VB工程中引用,没有任何变化。
·将结构转换为类,勉强可以在一个exe中实现,不过结构和类的不同需要注意。
我是在exe中实现的,请问这样做是不是很不合理呢? 另外想问得是,你所说的变通方式,可否再说得详细一些?想好好学习下,一直都觉得自己没体会到vb的要领 非常感谢你!!
tlb用VC编写就可以了,如果你能找到《Advance Visual Basic》附带的工具EditTLB.exe就更方便了。
置于用class实现,纯属“可能的方案”,你置于将结构的属性定义到一个类中,安装类变量的调用方式使用就可以了。
'模块代码
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以上代码测试成功,运行程序时“即时”窗口打印了自定义类型中变量的值
不过不知道是不是楼主想要的效果
如果仅需要使用声明的结构定义而不会创建dll中的任何类,那么只引用tlb就可以了。