冰天雪地寒风刺骨等待解决办法,VB6.0用组件连接点崩溃问题

islife 2011-12-01 07:20:19

我用ATL用C++ 做了个COM组件,需要在VB6下使用。
组件中调用了一个DLL,DLL中有多个线程运行,
然后组件IDL实现了两种接口,一种是用Advise注册回函数,一种是声明了一个连接点
这两种模式都能正常工作

然后我在VB6中引用了该组件,

使用 withevents 声明了

VB中自动生成了连接点的函数框架:

Private Sub agent_CallbackFunction(ByVal functype As Byte, ByVal newtick As Long, ByVal msgtype As String, ByVal msgname As String, ByVal msgid As Long, ByVal wparam As Long, ByVal lparam As Long)
On Error GoTo err:
msg = msg + "fuctype=" + Str(functype) + " type=" + msgtype + " name=" + msgname + " id=" + Str(msgid)
msg = msg + " wparam=" + Str(wparam) + " lparam" + Str(lparam)

If Len(msg) > 600 Then
msg = ""
End If

Text1.Text = msg
Exit Sub
err:
MsgBox err.Description

End Sub


然后运行完全正常!!!

问题的关键是:
不在回调函数中设断点一切正常
只要我在这个函数中设一个断点,当它触发后,程序停止,然后我什么也不做,直接继续让程序运行,杯具出现
蹦出了DDE什么的错误框,然后再点确认后,更大杯具出现!VB6的IDE直接退出了!!!没了!又要重新打开工程

哪位高手帮帮,我被这个问题折磨一天了!!
VB6已经打了 SP6的补丁了!!
...全文
62 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
islife 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 chinaboyzyq 的回复:]

调试外部动态库或API时,一般不要设置断点,这样做很多时候会造成程序崩溃。
你可以在要观察的地方用:debug.print 变量名,来输出你要观察的数据。
[/Quote]

没有办法啊,我是在为VB6的客户做个功能组件,这个组件在其他版本VB下一切调试正常,就是在VB6下出现了这个问题,不让客户设断点是个无理要求啊,他们还就喜欢用断点
贝隆 2011-12-02
  • 打赏
  • 举报
回复
这个不好说,毕竟你看不到DLL函数内部的执行情况。
chinaboyzyq 2011-12-02
  • 打赏
  • 举报
回复
调试外部动态库或API时,一般不要设置断点,这样做很多时候会造成程序崩溃。
你可以在要观察的地方用:debug.print 变量名,来输出你要观察的数据。

863

社区成员

发帖
与我相关
我的任务
社区描述
VB COM/DCOM/COM+
c++ 技术论坛(原bbs)
社区管理员
  • COM/DCOM/COM+社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧