Конвертировать начале-обязательный код для позднего связывания


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


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

Sub EarlyBinding()
Dim ArcMap As esriArcMapUI.MxDocument

    Set ArcMap = GetObject("C:UsersMikeDownloadsAssessment Mapping.mxd", _
                           "esriArcMapUI.MxDocument")
    Debug.Print ArcMap.Title
End Sub

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

Sub LateBinding()
Dim ArcMap As Object

    Set ArcMap = GetObject("C:UsersMikeDownloadsAssessment Mapping.mxd", _
                           "esriArcMapUI.MxDocument")
    Debug.Print ArcMap.Title

End Sub

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

1 2

1 ответ:

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