【问题标题】:Convert early-binding code to late-binding将早期绑定代码转换为后期绑定
【发布时间】:2011-07-17 12:38:02
【问题描述】:

我经常在 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 应用程序有什么特别之处,他们支持这种方法?

【问题讨论】:

  • 重新标记 w/o VB6。这里没有 VB6 问题。
  • 我标记了这个 VB6 因为与 VBA 重叠。我假设这里讨论的概念同样适用于 VBA 和 VB6。如果我的假设有误,请纠正我。
  • 你说得对,VBA 和 VB6 几乎是一回事,只是 VBA 没有编译器可以编译为本机代码,只有伪代码引擎。

标签: vba com vb6 esri late-binding


【解决方案1】:

很可能是 Esri 对象没有正确支持 IDISPATCH。您可以尝试 CALLBYNAME,但我猜这也行不通,因为我相信它也可以通过 IDispatch 进行向量化。

【讨论】:

  • 如果 ESRI 对象不支持 IDISPATCH,那么第一个示例(使用早期绑定)仍然可以工作?
  • 是的,早期绑定不会通过 IDispatch,因此这些调用仍应正常工作。这将是一种奇怪的情况,但它肯定是可能的。你也可以有相反的,一个只支持 IDISPATCH 并且根本不公开任何其他接口的对象。仅用于脚本编写的对象有时会以这种方式运行,尽管我现在想不出一个...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-15
  • 1970-01-01
  • 2016-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多