excel - 如何在 VBA 中仅使用后期绑定来向下转换对象?
问题描述
我正在编写一个 VBA 应用程序,对于一个特定的功能,我只使用后期绑定,因为该应用程序的大多数用户都没有安装参考(也不会使用这个特定的功能)。
我正在使用的对象的行为如下:
class PISDK{
PIServer GetServer(string hostName)
}
该GetServer
方法返回一个PIServer
对象,但存在一个更具体的接口,实现PIServer
:
interface IGetPoints2 : PIServer{}
我想将PIServer
对象向下转换为IGetPoints2
对象。
什么都不做,我得到一个 PIServer 对象:
Dim PiSdk As Object
Dim PiServer As Object
Set PiSdk = CreateObject("PISDK.PISDK")
Set PiServer = PiSdk.GetServer("foo")
在调试器中查看PiServer
证实了这一点。
使用强类型变量应该可以,但我不想引用此处使用的任何类型。
如何仅使用后期绑定来向下转换此对象?
解决方案
- 由于您没有添加对 PI SDK 类型库的引用,我相信您不能使用“rtInterpolated”作为 ArcValue 方法的第二个参数;相反,您可以使用相应的数字(RetrievalTypeConstants 枚举中的“rtInterpolated”为 3)。
- 带有后期绑定的 VBA 对可选参数很棘手,因为我们在调用方法时不能省略它们。相反,您需要使用 Nothing(如果可选参数是对象)或“”(如果可选参数是字符串)作为“参数占位符”(顺便说一下,在
脚本语言 VBScript中也会发生同样的情况对于包含在扩展名为 .vbs 的文件中的脚本,这些脚本
独立于任何应用程序运行)。 - 能够将一些功能示例代码放在一起,更完整,希望对您有所帮助。
推荐阅读
- php - 尝试登录;注册工作寿
- python - 什么是“断言 self._self_reading_future 是无”?(异步)
- python - 在python中将列表附加到字典的问题
- c# - 为列表中的元素设置值时,赋值的左侧必须是变量
- android - startAt() 没有用于 Firebase 查询的数字选项
- java - 无法找到 compileTestGroovy Gradle Build 的循环依赖项
- mongodb - Mongo:在键值对数组上添加部分唯一索引
- reactjs - 在 React 中出现语法错误,显示 Unexpected token, expected "," (49:8)
- json - 将反应应用程序推送到heroku时纱线不断重复
- php - 根据父级重新排列数组