用API写的VB6 的串口类,出现“遇到问题需要关闭”

API写了个 VB6 的类mycomm(环境是WinXP2 + VB6 sp6 rev6.0.9782),在Sub Main() 读写串口下一切正常!不管是调试,还是编译运行都好好的。

将这个类加入到一个现有的、带有窗体的VB6工程中后,运行程序,读写串口绝大时候都正常!
可是就在退出程序时十次有七八次都(不是总是)出现 “遇到问题需要关闭。我们对此引起的不便表示抱歉”这样的错误。
如果将调用mycomm的代码注释后,再运行就没问题了。

网上找了一天,没解决。结果今天自己搞定了,HOHO!
原来是在类初始化时用 GlobalAlloc();类终止时用了  GlobalFree() 引起的!

不用这个方法,改成定义动态数组就可以了。如:
Private m_buffIn() As Byte

相关的API声明中参数类型改成Byte:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Byte, Source As Byte, ByVal length As Long)
Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Byte, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, lpOverlapped As Any) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Byte, ByVal nNumberOfBytesToRead As Long, lpnBytesRead As Long, lpOverlapped As Any) As Long

调用时形如:
Redim m_buffIn(0 to 1024)
Call CopyMemory(buffInput(0), m_buffIn(0), nBytesRead)

附:之前还遇到过下面的错误(出自http://hi.csdn.net/tipfoo):
“0x????????”指令引用的“0xc0000005”内存。该内存不能为“read”。
“0x????????”指令引用的“0x????????”内存,该内存不能为“written”。
解决:传递的字符串参数值末尾加 Chr(0)。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

tipfoo

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值