|
在 VB 的标准工程的标准模块中:- Public Type EventRecord
- TriTime As Date
- TriType As String
- CallMobile As String
- End Type
- Sub testVariant()
- Dim er As EventRecord
- Dim p As Variant
- er.TriTime = Now()
- er.TriType = “CallIn”
- er.CallMobile = “13907309999”
- p = er
- End Sub
复制代码
这样是有问题的。会出现“编译错误:只在定义在公共对象模块中用户定义类型能和变体类型相互转换或传递给后期绑定功能。”的错误。
而如果将这些代码放在窗体模块中:
程序编译通不过,出现“编译错误:在私有对象模块中不能定义Public的用户定义类型。”
将用户定义类型改为:运行程序,同样报第一种情况的编译错误。
新建一个类模块,将用户定义类型移到类模块中,并将声明成Public,运行程序,同样报错。与第二种情况相同。
这说明一点,为了实现变体类型变量与用户定义类型变量的相互转换,在一个VB标准工程中,用户类型定义放在模块中是不行的,放在窗体或类模块中也是不行的,窗体或类模块都是私有的,无法找到公共对象模块。那么,怎么做才能做到后期绑定呢?
好了,我们来添加一个ActiveX DLL工程,将:- Public Type EventRecord
- TriTime As Date
- TriType As String
- CallMobile As String
- End Type
复制代码 移到这个工程的类模块中,设置该类的Instancing属性,该属性确定在工程之外是否能创建公共类的实例,它有6种选择,在这里我们选择 5 – MultiUse,允许其它应用程序创建该类的实例。
再回到原来的工程,设置工程的引用,添加“工程2”(就是上面的ActiveX DLL工程)。删除工程的模块和类模块,只剩下窗体模块:
运行程序,程序能够正常通过。
结论:当我们要开发一个应用程序时,我们应该将我们用到自定义类型都放到一个ActiveX DLL工程,形成公共的类型库(TypeLibrary),供程序调用。来自群组: ACC应用开发心得交流 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?注册
x
|