设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 9153|回复: 7
打印 上一主题 下一主题

VB Variant 数据类型与用户自定义类型

[复制链接]

点击这里给我发消息

跳转到指定楼层
1#
发表于 2013-9-28 12:27:44 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式
在 VB 的标准工程的标准模块中:
  1. Public Type EventRecord
  2.         TriTime As Date
  3.         TriType As String
  4.         CallMobile As String
  5. End Type

  6. Sub testVariant()
  7.     Dim er As EventRecord
  8.     Dim p As Variant

  9.     er.TriTime = Now()
  10.     er.TriType = “CallIn”
  11.     er.CallMobile = “13907309999”

  12.     p = er
  13. End Sub
复制代码


这样是有问题的。会出现“编译错误:只在定义在公共对象模块中用户定义类型能和变体类型相互转换或传递给后期绑定功能。”的错误。



而如果将这些代码放在窗体模块中:



程序编译通不过,出现“编译错误:在私有对象模块中不能定义Public的用户定义类型。”



将用户定义类型改为:
  1. Private Type EventRecord
复制代码
运行程序,同样报第一种情况的编译错误。

新建一个类模块,将用户定义类型移到类模块中,并将声明成Public,运行程序,同样报错。与第二种情况相同。

这说明一点,为了实现变体类型变量与用户定义类型变量的相互转换,在一个VB标准工程中,用户类型定义放在模块中是不行的,放在窗体或类模块中也是不行的,窗体或类模块都是私有的,无法找到公共对象模块。那么,怎么做才能做到后期绑定呢?

好了,我们来添加一个ActiveX DLL工程,将:
  1. Public Type EventRecord
  2.     TriTime As Date
  3.     TriType As String
  4.     CallMobile As String
  5. End Type
复制代码
移到这个工程的类模块中,设置该类的Instancing属性,该属性确定在工程之外是否能创建公共类的实例,它有6种选择,在这里我们选择 5 – MultiUse,允许其它应用程序创建该类的实例。

再回到原来的工程,设置工程的引用,添加“工程2”(就是上面的ActiveX DLL工程)。删除工程的模块和类模块,只剩下窗体模块:



运行程序,程序能够正常通过。

结论:当我们要开发一个应用程序时,我们应该将我们用到自定义类型都放到一个ActiveX DLL工程,形成公共的类型库(TypeLibrary),供程序调用。来自群组: ACC应用开发心得交流

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖2 订阅订阅
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-15 19:53 , Processed in 0.083452 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表