gpt4 book ai didi

c++ - 如何在正在运行的 Visual Basic 6.0 进程(例如 MSVBVM60.DLL)中运行 Visual Basic 代码?

转载 作者:行者123 更新时间:2023-11-28 03:52:14 28 4
gpt4 key购买 nike

我正在调试遗留的 Visual Basic 6.0 应用程序;该应用程序内置于 native 代码中,但不幸的是我们只有二进制文件,但没有源代码。因此,就程序的修改而言,我相当有限。

我的最终目标是在给定 HWND 的情况下获取某些控件的“名称”属性的值。我可以轻松地编写 VisualBasic 代码来执行此操作,但不幸的是,我看不到如何在正在运行的应用程序的上下文中执行此代码。

我的第一次尝试是在 VisualBasic 中创建一个 ActiveX DLL,它公开了我的“controlNameForHWND”函数。在运行时,我有一个小实用程序将第二个帮助程序 DLL 注入(inject) VB 运行进程,然后该帮助程序 DLL 调用 CoCreateInstance。这样我的 ActiveX 控件(它具有我在 VB 中编写的“controlNameForHWND”函数)在应用程序的进程中被实例化。

这很有效,但不幸的是,ActiveX 控件显然没有在与要调试的应用程序相同的上下文中执行。比如全局的App.hInstance值不同,全局的Forms数组返回的数组总是空的,等等。所以我所有的 VisualBasic 脚本代码都在平行宇宙中运行。厄运。 :-/

是否还有其他人知道如何能够将 VisualBasic 代码“注入(inject)”到 VB6 进程中?查看使用 Process Explorer 的过程显示库 MSVBVM60.DLL 已加载(Microsoft Visual Basic 虚拟机),但未加载,例如VBA.DLL。后者会很有趣,因为它导出一个未记录的 EbExecuteLine 函数来执行脚本语句。

我的想法有点不够用,所以我也很感激最疯狂的想法。 :-)

最佳答案

VB6 ActiveX DLL在客户端进程中运行,但它无法访问客户端进程的Forms 集合。我认为 App.hInstance 应该返回相同的值。

如果您在 VB6 IDE 调试器中调试 DLL,使其在单独的进程中运行。那个调试器做了一些疯狂的事情。您最好从 ActiveX DLL 构建 PDB 文件并在 Visual C++ 调试器中进行调试。

关于c++ - 如何在正在运行的 Visual Basic 6.0 进程(例如 MSVBVM60.DLL)中运行 Visual Basic 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5068566/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com