【问题标题】:How do I include an SDK routine in VB6?如何在 VB6 中包含 SDK 例程?
【发布时间】:2021-01-16 09:59:28
【问题描述】:

我正在修改一些旧的 VB6 代码,并且对名为 SDKPress(Index as integer, PressStatus as Integer, PressX as double, PressY as double, PressDataX as double, PressDataY as double) 的子例程进行了多次调用。

(此例程返回鼠标单击的位置,Index 返回鼠标所在表单上的哪个图形。)

由于项目中没有此代码,我假设它来自某些 Windows 软件开发工具包。但是,在开发 PC 上没有它的踪迹。只是 VisualBasic 目录中包含 winsdk_web.exe 的 SDK 目录。

我无法从另一个项目调用该子例程。子程序在哪里?我在哪里可以找到有关它的文档?如何以可以在其他项目中使用的形式获得它?

【问题讨论】:

    标签: windows sdk vb6 windows-xp


    【解决方案1】:

    找出它住在哪里。将光标放在 IDE 中的一个例程调用中,右键单击它,然后选择 go to definition。看看它会把你带到哪里。

    • 它可能是您项目中代码文件中的一个普通例程。
    • 它可能是 DLL 中的例程,通过 Declare 语句导入到您的项目中。
    • 它可能是 COM/ActiveX DLL 或 OCX 控件甚至 ActiveX EXE 中的例程。在这种情况下,IDE 将向您显示“对象浏览器”窗口,您应该能够找出例程所在的位置,然后从那里开始。 IE。弄清楚如何在另一个 VB 项目中添加对它的引用,以及如何在另一台 PC 上安装/注册相关的 DLL/OCX/EXE。

    OR,我确定您已经尝试过,但以防万一,请在源代码中搜索例程名称。在 VB IDE 中使用Ctr-F 或菜单项Edit-Find

    【讨论】:

    • 补充一点:对象浏览器是用 F2 调用的。您还应该检查菜单项 Project -> References 以查看其中添加了哪些 COM DLL。
    • 确实 F2 将始终打开对象浏览器。我认为 Shift-F2 (转到定义的快捷方式)将打开对象浏览器,如果它适合光标下的项目。我应该说这完全是凭记忆,因为这些天我实际上并没有做太多的 VB6 实践!
    • TIL:Shift+F2 确实做到了。几十年过去了,还有很多东西要学。
    • 使用对象浏览器,我得到答案“光标下的标识符无法识别。”我可以查看其他项目的定义并得到很好的答案。
    • 这很奇怪。对不起。如果我想到更多建议,我会在这里发布。
    【解决方案2】:

    DLL 文件包含 API 函数,vb6 代码将加载 DLL (Declare Function SDKPress Lib "DLLName" ....) 并调用函数,使用 DllExpView:https://www.nirsoft.net/utils/dll_export_viewer.html 等工具并列出 DLL 及其函数。或者它也可能是一个内部子程序/函数。

    【讨论】:

      【解决方案3】:

      如果使用 SDK 的原始程序运行,您可以使用 Process Monitor 和 Process Explorer 收集一些信息。这些可以帮助您定位多种类型的依赖关系。

      我将从第二个开始 - 当您运行程序时,ProcExp 将向您显示加载到进程中的所有文件,包括 DLL。仅此一项可能会让您有所了解。

      如果这还不够,请使用 ProcMon 主动监控程序的活动。虽然 ProcExp 基本上是时间快照,但 ProcMon 会动态记录程序的许多操作,包括它如何搜索和最终加载 DLL。

      https://docs.microsoft.com/en-us/sysinternals/downloads/procmon

      https://docs.microsoft.com/en-us/sysinternals/downloads/process-explorer

      我发现这些工具在很多情况下都是无价的。它们有助于打破许多程序员脑海中出现的围绕正在运行的进程的“黑匣子”。

      【讨论】:

      • 我找到了一个在 XP 上运行的进程监视器的副本,但尝试了它无济于事。是否有一个很好的站点来获取在 XP 上运行的 Process Explorer 16.02?较新的 64 位版本将无法运行。
      • 有 32 位版本吗?
      猜你喜欢
      • 2012-02-28
      • 1970-01-01
      • 2017-08-03
      • 1970-01-01
      • 2012-07-12
      • 1970-01-01
      • 2022-01-15
      • 2018-12-18
      • 1970-01-01
      相关资源
      最近更新 更多