【问题标题】:How to Inspect Call Stack如何检查调用堆栈
【发布时间】:2010-10-15 12:56:01
【问题描述】:

是否可以在 MS Access 2003 的 VBA 中看到CallStack?也就是说,有没有可能从procedurefunction看到另一个function被调用?

【问题讨论】:

  • 这是 ASM 适合的任务。

标签: ms-access vba callstack


【解决方案1】:

在运行时,查看菜单 -> 调用堆栈(或按 CTRL + L)。

【讨论】:

    【解决方案2】:

    据我所知,VBA 中没有编程方式来查看调用堆栈。这个问题的通常解决方案是使用一些结构来跟踪函数的调用,但它对我来说似乎总是一个杂物,而且只有在编程时(而不是在运行时)才真正有用,在这种情况下,我觉得 VBE 的查看调用堆栈的内置功能就足够了。

    而且,顺便说一句,我总是将调用堆栈按钮放在我的 VBE 工具栏上,因为它是我最常用的功能之一。我还添加了编译按钮——我认为它默认不在工具栏上很疯狂,因为它鼓励人们在不强制编译的情况下编写代码。话又说回来,Access 2000 在默认情况下甚至没有使用 Option Explicit(据说是为了与使用 VBE 的其他应用程序保持一致——换句话说,为了使其与几乎没有代码的应用程序保持一致,使 Access 变得笨拙——重)。

    但我离题了...

    【讨论】:

      【解决方案3】:

      最后,为您的函数添加一个可选参数,并以这种方式传递调用者名称。对于表单,可以使用Me.Name作为参数。

      【讨论】:

        【解决方案4】:

        是的,这是可能的,但它不是很有用!

        Private Declare Sub SetMode Lib "vba332.dll" Alias "EbSetMode" (ByVal lngMode As Long)
        Private Declare Function GetCallStackCount Lib "vba332.dll" Alias "EbGetCallstackCount" (lngCount As Long) As Long
        Private Declare Function GetCallStackFunction Lib "vba332.dll" Alias "EbGetCallstackFunction" (ByVal Lvl As Long, ByRef strBase As String, ByRef strModule As String, ByRef strFunction As String, ByRef Done As Long) As Long
        

        在使用 GetCallStackCount 和 GetCallStackFunction 调用 SetMode(2) 之前,以及在 SetMode(1) 之后。

        【讨论】:

        • 什么是SetModeGetCallStackCountGetCallStackFunction怎么用?
        猜你喜欢
        • 2023-03-05
        • 2011-09-01
        • 2011-02-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-06
        • 1970-01-01
        • 2023-03-11
        相关资源
        最近更新 更多