关于vb自定义类型的使用 请高手指点!!

yttself 2008-05-07 12:47:23
Public Type cordAryTemp
cord_x As Double
cord_y As Double
cord_h As Double
colorDou As Double
End Type
这个是在模块中定义的,可以在其他模块或窗体中使用

问题是,我现在想在一个类里也使用这个自定义类型,用来做函数的传递参数,或者变量,一直会出错

找到类似的帖子,说是可以把这个自定义类型定义在类模块或公共模块, 供整个工程使用,烦请高手们给个详细的说明,最好给个例子说明在类中如何使用这个自定义类型

谢谢!!
...全文
845 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
东方之珠 2008-05-07
  • 打赏
  • 举报
回复
不用复制了.在类里面可以直接调用:
Dim obj As New cordAryTemp
obj.colorDou
MrQiu 2008-05-07
  • 打赏
  • 举报
回复
如果那个类是前绑定的话,可以直接用,当然前提是Public定义,如果是后绑定的话,直接传数字进去,或者在工程里面定义一个跟它一摸一样的枚举
yttself 2008-05-07
  • 打赏
  • 举报
回复
似乎不行艾
请大家帮帮忙啊
yinweihong 2008-05-07
  • 打赏
  • 举报
回复
具体错误内容贴出来看看~
yttself 2008-05-07
  • 打赏
  • 举报
回复
复制?意思是在类里同样定义么?
东方之珠 2008-05-07
  • 打赏
  • 举报
回复
将这个自定义类型复制到类里面即可.
yttself 2008-05-07
  • 打赏
  • 举报
回复
哈哈 谢谢大家指点!!学到很多新的东西!
散分结贴去!
Tiger_Zhao 2008-05-07
  • 打赏
  • 举报
回复
这也不失为一种方法,虽然有些冗余定义,不过不影响使用。
如果仅需要使用声明的结构定义而不会创建dll中的任何类,那么只引用tlb就可以了。
Sandrer 2008-05-07
  • 打赏
  • 举报
回复
能不能变通一下,用内存地址来转换呢?

我举个例子:


'模块代码
Public Type cordAryTemp
cord_x As Double
cord_y As Double
cord_h As Double
colorDou As Double
End Type

Public 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



以上代码测试成功,运行程序时“即时”窗口打印了自定义类型中变量的值
不过不知道是不是楼主想要的效果
yinweihong 2008-05-07
  • 打赏
  • 举报
回复
错误原因和解决办法基本上Tiger_Zhao都给出来了

http://topic.csdn.net/t/20020322/15/593519.html
yttself 2008-05-07
  • 打赏
  • 举报
回复
找到一个生成tlb的方法,在Dll的<工程屬性>中選擇第四個選項<元件>,在<遠程伺服器>可選框中選中<遠程伺服器檔案>,再編譯此DLL工程,就會有這個文件了

请问如果想使用这个自定义类型的时候,是引用这个dll还是引用tlb,或是两个都需要引用到工程呢?

明白你的意思,有空我会试着用class实现看看

呵呵 谢谢你咯
Tiger_Zhao 2008-05-07
  • 打赏
  • 举报
回复
ActiveX Dll 是标准的做法,如果工程不大,却要多出一个基本属于空壳的dll,有要注册,有点不方便。
tlb用VC编写就可以了,如果你能找到《Advance Visual Basic》附带的工具EditTLB.exe就更方便了。
置于用class实现,纯属“可能的方案”,你置于将结构的属性定义到一个类中,安装类变量的调用方式使用就可以了。
舉杯邀明月 2008-05-07
  • 打赏
  • 举报
回复
Up.......

yttself 2008-05-07
  • 打赏
  • 举报
回复
请问 Tiger_Zhao

对于上面的问题,我把自定义类型写到ActiveX Dll中,问题得以解决了

我是在exe中实现的,请问这样做是不是很不合理呢?

另外想问得是,你所说的变通方式,可否再说得详细一些?想好好学习下,一直都觉得自己没体会到vb的要领

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

本人是vb菜鸟,请教公共类该如何定义?

似乎类模块中不允许定义
Public Type cordAryTemp
cord_x As Double
cord_y As Double
cord_h As Double
colorDou As Double
End Type
Tiger_Zhao 2008-05-07
  • 打赏
  • 举报
回复
Public的Class按照COM标准,是“工程外”可见的;定义在模块中的结构仅仅是工程内可见,当然不能作为公共类的参数类型。
必须将结构的定义从模块移动到公共类中。
yttself 2008-05-07
  • 打赏
  • 举报
回复
MrQiu
我不明白你说的邦定的意思,请说明白点好吗?
yttself 2008-05-07
  • 打赏
  • 举报
回复
也许我没表达清楚
错误是出在类里的一个public函数用这个自定义类型作参数的情况下
yttself 2008-05-07
  • 打赏
  • 举报
回复
错误:只有当公有的用户自定义数据类型被定义在公共模块中时,才可以被用为类模块中公共过程的参数或返回值

我的自定义类型的确是在公共模块中定义的阿,不知道问题在哪儿了

7,765

社区成员

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

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