0

我有一个用 C++ 编写并用 VS2010 构建的 OCX 控件。该控件的宿主应用程序是一个 VB6 ActiveX EXE。我想弄清楚如何在 VS2010 中调试 OCX 控件。通常要调试 OCX 控件,您需要将控件嵌入到 OCX 控件的Properties:Debugging:Command字段中的宿主应用程序中。当我进入 VB6 Host 程序的 EXE 并尝试开始调试时,它给了我以下警告框错误警报

我怀疑VB6调试信息与VS2010不兼容。在这种情况下,我实际上不需要调试 VB6 ActiveX EXE。(我可以从 VB6 开发环境中做到这一点)。但是我尝试在上面的对话框中单击“是”,并且 OCX 控件在调试器之外运行,因为它忽略了我设置的任何断点。如何让 OCX 控件在调试器下运行?

我看过这个类似的问题,但情况似乎略有不同,因为听起来这种情况下的所有 OCX 控件都在 VB6 中。它谈到了为 OCX 控件设置“二进制兼容性”,但我相信这只适用于 VB6 环境,不适用于 VS2010 下的 C++。

还有一种方法可以为与 VS2010 调试环境兼容的 VB6 ActiveX EXE 生成调试信息吗?

4

2 回答 2

1

经过更多探索后,我发现可以按照我最初在原始帖子中提出的要求进行操作。
虽然 VS2010 调试器在通过 VB6 ActiveX EXE 容器启动时不会自动附加到 OCX 控件,但可以手动附加到 OCX 控件。实际上可以在 VB6 调试器中运行容器 ActiveX EXE,同时在 VS2010 调试器中运行 OCX 控件。这是顺序

使用 ActiveX EXE 项目启动 VB6 开发环境。在调试模式下开始执行 ActiveX EXE。现在启动 VS2010 开发环境并选择菜单项Debug:Attach to Process...然后选择 VB6 进程作为要附加的进程。现在 VB6 应用程序中的断点将路由到 VB6 调试器,而 OCX 控件中的断点将路由到 VS2010 调试器。

如果您不需要调试 VB6 ActiveX EXE,您可以将其指定为 VS2010 OCX 控件的启动命令,然后在启动后执行附加到进程,尽管使用 VB6 开发环境可确保您可以在 OCX 控件中捕获断点在启动时。

于 2018-02-09T21:15:00.870 回答
0

我已经能够调试 OCX 控件,但我发现的唯一方法是使用我在之前评论中的链接(TSTCON Still AvailableTSTCON Info)中提供的 TSTCON 示例程序。我使用 OCX 控件将 TSTCON 和 TCProps 作为项目添加到 VS2010 解决方案中,然后将 TSTCON.exe 指定为调试命令行。这样做我可以在 OCX 控件中设置断点。在 OCX 控件上启动调试将启动 TstCon。然后当 TstCon 应用程序启动时,右键单击内容区域并选择“插入新控件”并从所有已注册 OCX 控件的列表中选择 OCX 控件。一定要选择Linker:Register Output:Yes用于 OCX 控制项目。控件将初始化,然后可以调用任何方法并通过 TstCon 应用程序菜单Control:Invoke Methods...指定参数

于 2018-02-08T20:59:34.577 回答