Преобразовать код с ранним связыванием в код с поздним связыванием - PullRequest
2 голосов
/ 17 марта 2011

Я часто писал код раннего связывания в VBA и VB6 для автоматизации офисных приложений (Word, Excel и т. Д.), А затем переключал его на позднее связывание для обработки нескольких версий этих приложений.Я пытаюсь сделать то же самое, но я автоматизирую ГИС-приложение ESRI ArcMap, и концепции, которые я использовал в прошлом, похоже, не переводятся.


Следующий код работает правильно:

Sub EarlyBinding()
Dim ArcMap As esriArcMapUI.MxDocument

    Set ArcMap = GetObject("C:\Users\Mike\Downloads\Assessment Mapping.mxd", _
                           "esriArcMapUI.MxDocument")
    Debug.Print ArcMap.Title
End Sub

Но этот код завершается неудачно с Объект не поддерживает это свойство или метод в строке Debug.Print:

Sub LateBinding()
Dim ArcMap As Object

    Set ArcMap = GetObject("C:\Users\Mike\Downloads\Assessment Mapping.mxd", _
                           "esriArcMapUI.MxDocument")
    Debug.Print ArcMap.Title

End Sub

Есть лиЧто-то особенное в приложениях MS Office, что они поддерживают этот подход лучше, чем COM-серверы в целом?Или что-то особенное в приложениях ESRI, что они не поддерживают этот подход?

1 Ответ

4 голосов
/ 17 марта 2011

Скорее всего, объект Esri не поддерживает IDISPATCH должным образом. Вы можете попробовать CALLBYNAME, но я думаю, это тоже не сработает, потому что я верю, что оно распространяется и через IDispatch.

...