首页 > 解决方案 > 如何在 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证实了这一点。

使用强类型变量应该可以,但我不想引用此处使用的任何类型。

如何仅使用后期绑定来向下转换此对象?

标签: excelvbaosisoft

解决方案


请阅读这个:

  • 由于您没有添加对 PI SDK 类型库的引用,我相信您不能使用“rtInterpolated”作为 ArcValue 方法的第二个参数;相反,您可以使用相应的数字(RetrievalTypeConstants 枚举中的“rtInterpolated”为 3)。
  • 带有后期绑定的 VBA 对可选参数很棘手,因为我们在调用方法时不能省略它们。相反,您需要使用 Nothing(如果可选参数是对象)或“”(如果可选参数是字符串)作为“参数占位符”(顺便说一下,在
    脚本语言 VBScript中也会发生同样的情况对于包含在扩展名为 .vbs 的文件中的脚本,这些脚本
    独立于任何应用程序运行)。
  • 能够将一些功能示例代码放在一起,更完整,希望对您有所帮助。

推荐阅读