如何在来自 activex dll/tlb 参考后期绑定的基本脚本中使用枚举
How to use enums in basic script from an activex dll/tlb reference late bound
TLDR:
我正在编写和测试来自 VBA 的脚本,但它最终作为单个 .bas
文件从主桌面应用程序中执行。
DLL 引用从 VBA 丢失到 bas
迫使我将应用程序的成员类型定义为 "object" 而不是它们在 .bas
文件.
我可以通过在 bas 文件中定义引用来避免将早期绑定代码转换为后期绑定代码吗?
更多信息:
我需要将 vba 脚本转换为软件可以执行的基本脚本。无论如何,基本脚本中是否有引用 tlb 文件?我使用 set app = CreateObject("...")
调用应用程序示例在示例中显示了所有类型为 "object" 的内容,这些示例没有提供来自 VBA(当然)
的智能感知
是否可以将枚举引用为它们的文本值而不将它们转换回整数值?此外,有没有一种方法可以正确键入应用程序对象,而不是在基本脚本中使用 object
?
Can I avoid converting early-bound to late-bound code by defining a reference in the bas file?
不,你不能。 .bas 文件不包含此类元数据。事实上,它保存的唯一元数据是模块的名称,存储为隐藏的 VB_Name
属性,VBE 使用该属性填充模块的 Name
属性.
引用属于 VBProject
对象;如果您希望 .bas 文件独立存在并可通过 VBScript 运行时在 VBE 外部执行,那么您必须将您的早期绑定代码转换为后期绑定。
这意味着您确实失去了智能感知,因为在该后期绑定库中定义的所有类型现在都必须声明为 Object
,并且需要将枚举值转换为其基础整数值。
或者,您可以为这些枚举定义同名常量,并保留名称:
Private Const SomeEnumValue As Long = 42
或者,[重新]自己定义枚举:
Private Enum SoneEnum
SomeEnumValue = 42
'...
End Enum
TLDR:
我正在编写和测试来自 VBA 的脚本,但它最终作为单个 .bas
文件从主桌面应用程序中执行。
DLL 引用从 VBA 丢失到 bas
迫使我将应用程序的成员类型定义为 "object" 而不是它们在 .bas
文件.
我可以通过在 bas 文件中定义引用来避免将早期绑定代码转换为后期绑定代码吗?
更多信息:
我需要将 vba 脚本转换为软件可以执行的基本脚本。无论如何,基本脚本中是否有引用 tlb 文件?我使用 set app = CreateObject("...")
调用应用程序示例在示例中显示了所有类型为 "object" 的内容,这些示例没有提供来自 VBA(当然)
是否可以将枚举引用为它们的文本值而不将它们转换回整数值?此外,有没有一种方法可以正确键入应用程序对象,而不是在基本脚本中使用 object
?
Can I avoid converting early-bound to late-bound code by defining a reference in the bas file?
不,你不能。 .bas 文件不包含此类元数据。事实上,它保存的唯一元数据是模块的名称,存储为隐藏的 VB_Name
属性,VBE 使用该属性填充模块的 Name
属性.
引用属于 VBProject
对象;如果您希望 .bas 文件独立存在并可通过 VBScript 运行时在 VBE 外部执行,那么您必须将您的早期绑定代码转换为后期绑定。
这意味着您确实失去了智能感知,因为在该后期绑定库中定义的所有类型现在都必须声明为 Object
,并且需要将枚举值转换为其基础整数值。
或者,您可以为这些枚举定义同名常量,并保留名称:
Private Const SomeEnumValue As Long = 42
或者,[重新]自己定义枚举:
Private Enum SoneEnum
SomeEnumValue = 42
'...
End Enum