【问题标题】:Extract function signatures from the Office VBA Object Models?从 Office VBA 对象模型中提取函数签名?
【发布时间】:2022-01-22 00:59:12
【问题描述】:

有没有办法从对象库二进制文件(例如,通常位于 C:\Program Files\Microsoft Office\Office14\MSACC.OLB 的 Microsoft Access 对象 14.0 库)中提取函数/属性数据?

我对实现细节不感兴趣,我只是希望能够提取公共接口 - 类似于:

Class: TextBox
    Properties:
         Property Get BackColor() As Long
         Property Let BackColor(value As Long)
         ... (etc)

    Functions:
         Sub Move(Left, [Top], [Width], [Height])
         ... (etc)

    Events:
         Event AfterUpdate()
         Event BeforeUpdate(Cancel As Integer)
         ... (etc)

确切的格式并不重要 - 我只需要任何格式的这些数据的文本转储(然后我将围绕它编写一个程序来解析它)。在 C++ 世界中,这基本上是头文件的提取。

大概这是 VBE 中的对象资源管理器已经做的事情(以及自动完成,以及任何其他能够读取 *.olb 文件的程序),不幸的是我什至不知道从哪里开始(谷歌搜索“从 olb 提取文件”/“读取 olb 文件”没有产生任何有用的结果)。任何人都可以提供任何建议吗?

【问题讨论】:

    标签: vba extract


    【解决方案1】:

    您可以使用 PowerShell 轻松做到这一点。语法是:

    New-Object -ComObject <com object>
    

    要列出Excel.Application 中的所有属性,我们使用Get-Member

    New-Object -ComObject Excel.Application | Get-member
    

    要将列表导出到文本文件中:

    New-Object -ComObject Excel.Application | Get-member | Format-Table -Wrap -Autosize | Out-File list.txt
    

    编辑:

    COM 对象注册在HKEY_LOCAL_MACHINE\SOFTWARE\Classes

    get-ChildItem "REGISTRY::HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Excel.*" | foreach-object {New-Object -ComObject $_.pschildname | Get-member | Format-Table -Wrap -Autosize | Out-File $($_.pschildName + ".txt") }
    

    此命令将列出名称以Excel. 开头的所有 COM 对象,并在名为 &lt;com object&gt;.txt 的文件中打印它们各自的属性。

    【讨论】:

    • 这太好了,谢谢。有没有办法为库中的每个 Com 对象自动执行此操作?即Excel.Application, Excel.Workbook, Excel.Chart 等。大约有 300 个,所以手动操作可能需要一段时间!
    【解决方案2】:

    Microsoft 有一个名为“oleview.exe”的实用程序,该实用程序在 2003 年肯定可用。它可以打开一个“.OLB”文件文件,并将其转储为文本格式。我有一个 oleview 的副本,它在 Windows 10 上仍然可以正常运行。它还需要一个名为“iviewers.dll”的关联 DLL。我不知道这些天在哪里可以下载它,所以尝试谷歌搜索。它可能随 Visual Studio 一起提供。

    【讨论】:

    • Oleview 在最新的 (v10) Windows SDK 中可用。
    猜你喜欢
    • 1970-01-01
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多