VB 6.0 ActiveX 控件异常处理和清理

Posted

技术标签:

【中文标题】VB 6.0 ActiveX 控件异常处理和清理【英文标题】:VB 6.0 ActiveX control exception handling and cleanup 【发布时间】:2012-07-22 07:48:21 【问题描述】:

我使用 VB 6.0 在单个“.ocx”文件中创建了各种 activex 控件。

我在我的 MFC 应用程序中使用这些用户控件。我在设计时在我的 MFC PropertyPage 对话框中添加了这些控件。此属性页被添加到属性表中,此属性页被添加到 ActiveX 容器控件中。最后容器控件将被另一个应用程序加载。

我的对话框在 Windows XP、Windows 7 32 位操作系统中正确加载。 在 Windows 2008 服务器和 Windows 7 64 位操作系统中,当我的 VB 6.0 用户控件添加到属性页时,则为CPropertySheet::OnInitDialog getting failed (throws exception)。我已经尝试过可能的 MFC 异常来捕获异常,但默认的 (...) catch 块只会被执行。

当我从 PropertyPage 中删除 VB 6.0 用户控件时,也不例外。

    VB 6.0用户控件抛出的异常如何处理? 如何确保在 VB 6.0 用户控件中创建的内存已被正确释放?

【问题讨论】:

记录您看到的特定异常。请务必在 64 位版本的 Windows 上使用正确版本的 regsrv32.exe。您需要 c:\windows\syswow64 中的那个来获得 32 位注册。 我无法获得正确的异常。相反,我的默认 catch 块正在执行 catch(...) 【参考方案1】:

尝试注释掉VB6控件项目中的所有代码,然后重新编译。使用属性页重试。如果你没有遇到同样的问题,那么你很幸运。逐个方法取消注释代码,直到找到故障代码。

【讨论】:

谢谢。我已经在 VB 6.0 控件类的几乎所有方法中添加了异常处理,但在 VB 中没有捕获异常。我会一一尝试评论方法。 我有一个没有源代码的新 ActiveX 控件。这也有同样的问题。 注意:一个新的观察是每当在 PropertyPage 中添加的 VB 控件(在 PropertySheet 中添加)时就会出现问题。当我尝试将 VB ACtiveX 控件添加到 VC ActiveX 容器中时,它工作正常。 @RajeshSubramanian - 我想知道 ActiveX 容器是否正在加载某些依赖项,但您的 DLL 没有。它只需要一个失败的 LoadLibrary() 并且您将取消引用一个空指针。查看进程中加载​​了哪些 DLL 和 OCX,并查看您的 MFC 应用程序中是否存在明显缺失的内容。 在这两种情况下都加载了我的 ActiveX 容器。即,在第一种情况下:VB控件被添加到propertyPage中,PropertyPage被添加到propertysheet中,PropertySheet被添加到ActiveXContainer的顶部,我打开了ActiveX Container。第二种情况:VB 控件直接添加到 ActiveX 容器中,我正在打开 ActiveX 容器。

以上是关于VB 6.0 ActiveX 控件异常处理和清理的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 vb.net 从 MS Access DB 表单中找出 Activex 控件

如何从 ATL activex 控件将错误字符串和错误代码返回到 VB6?

ActiveX 控件默认属性发现

VB开发ActiveX控件步骤,ocx控件中的classid怎样获得

Visual Basic 6 ActiveX 控件

20分,各位高手请来帮忙啊!!!VB6.0 调用Bartender7.75问题!!!!