Как я могу уменьшить объект, используя только позднюю привязку в VBA? - PullRequest
0 голосов
/ 17 июня 2019

Я пишу приложение 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 в отладчике подтверждает, что.

Использование строго типизированной переменной должно работать, но я не хочу ссылаться ни на один из типов, используемых здесь.

Как я могу уменьшить этот объект, используятолько поздняя привязка?

1 Ответ

0 голосов
/ 17 июня 2019

Пожалуйста, прочтите это:

  • Поскольку вы не добавляете ссылку на библиотеку типов PI SDK, я считаю, что вы не можете использовать "rtInterpolated" в качестве второго параметраМетод ArcValue;вместо этого вы можете использовать соответствующий номер (который равен 3 для «rtInterpolated» в перечислении RetrievalTypeConstants).
  • VBA с поздним связыванием сложна с необязательными параметрами, поскольку мы не можем их опустить при вызове метода.Вместо этого вам нужно использовать Nothing (в случае, если необязательный параметр является объектом) или "" (если необязательный параметр - строка) в качестве "заполнителей параметров" (кстати, то же самое происходит в
    VBScript,язык сценариев для сценариев, содержащихся в файлах с расширением
    .vbs, которые запускаются независимо от любого приложения).
  • способен собрать воедино некоторый функциональный пример кода, который является более полным и, надеюсь, поможет вам.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...