Преобразовать код раннего связывания в позднюю связующую среду

StackOverflow https://stackoverflow.com/questions/5341544

Вопрос

Я часто писал код раннего связывания в VBA и VB6 для автоматизации офисных приложений (Word, Excel и т. Д.) Затем переключил его на позднее связывание для обработки нескольких версий этих приложений. Я пытаюсь сделать то же самое, но я автоматизирую приложение Esri Arcmap GIS, и концепции, которые я использовал в прошлом, кажется, не переводится.


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

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, что они не надо Поддержать этот подход?

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top