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

islife 2011-12-01 07:21:52

我用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的补丁了!!
...全文
144 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
islife 2011-12-09
  • 打赏
  • 举报
回复
算了放弃了,VB6怎么做我都无法让它能在回调中调试,各种方法都试过,线程同步,新的窗口过程,结了
islife 2011-12-03
  • 打赏
  • 举报
回复
说错了,不是说用VB6是低能,而是我现在面对的这几个人是特别懒的死板人
islife 2011-12-03
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 chinaboyzyq 的回复:]
这个问题在vb6下很多时候是没有办法解决的,别折腾了,按我在你的另一个帖子的说法去做。
谁说只有设置断点才算调试?调试的方式有多种。
[/Quote]

我也很想这样,但是用我组件的人却是一群低能啊,只用VB6,而且你高估他们了,他们只习惯于断点,无奈了
chinaboyzyq 2011-12-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 islife 的回复:]

问题是现在的现象就是这样,全速跑没有问题,一设断点后,再让它继续走就会崩溃,
另外,这个现象只在VB6中出现,VB2003以上版本都是正常的,正常调试没有问题
[/Quote]
这个问题在vb6下很多时候是没有办法解决的,别折腾了,按我在你的另一个帖子的说法去做。
谁说只有设置断点才算调试?调试的方式有多种。
islife 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 wshcdr 的回复:]

这个和断点没什么关系吧
[/Quote]
问题是现在的现象就是这样,全速跑没有问题,一设断点后,再让它继续走就会崩溃,
另外,这个现象只在VB6中出现,VB2003以上版本都是正常的,正常调试没有问题
islife 2011-12-02
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 qianjin036a 的回复:]

协同工作的两个线程,一个在运行,另一个你让设置了断点停下来,你说会不会出问题!
[/Quote]

谢谢啊!!这个给了我一个灵感,是不是我在组件中和VB的这个函数中做好一个互斥,让这两个同步好,是不是就会没问题了??
贝隆 2011-12-02
  • 打赏
  • 举报
回复
VB多线程的确会导致一些问题。就目前这些信息难以分析出什么问题来。
-晴天 2011-12-02
  • 打赏
  • 举报
回复
协同工作的两个线程,一个在运行,另一个你让设置了断点停下来,你说会不会出问题!
神马都能聊 2011-12-02
  • 打赏
  • 举报
回复
这个没什么好办法,就像是你写一个while死循坏,VB IDE 就像要挂掉一样,你要断点看什么,可以写日志吧,别写窜了 -.-
wshcdr 2011-12-02
  • 打赏
  • 举报
回复
这个和断点没什么关系吧
worldy 2011-12-01
  • 打赏
  • 举报
回复
多线程是VB6的软肋,除非非常的高手,难以使用VB6编出稳定的多线程,非常容易崩溃
islife 2011-12-01
  • 打赏
  • 举报
回复
如果不设断点就没有任何问题,我估计是线程的问题吧,但是VB6中如何解决呢???求高手
islife 2011-12-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 redui 的回复:]
连接点就是最好的回调,为什么还要设置回调函数?回调函数并不适用于COM,也不兼容多语言。
[/Quote]

我没有使用回调,只使用了连接点,问题就是连接点生成的那个函数中设断点就崩溃, 但是同样代码在VB2003下就没有任何问题,只在VB6中这样的,问题是,死板的客户非要用VB6
worldy 2011-12-01
  • 打赏
  • 举报
回复
在菜单工具-选项-环境中设置,运行前提升保存,这样可以避免辛苦编出的代码没了
redui 2011-12-01
  • 打赏
  • 举报
回复
连接点就是最好的回调,为什么还要设置回调函数?回调函数并不适用于COM,也不兼容多语言。
islife 2011-12-01
  • 打赏
  • 举报
回复
LS给点办法啊
islife 2011-12-01
  • 打赏
  • 举报
回复
倒,发了两次,用了200分啊

863

社区成员

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

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