用API写的VB6 的串口类,出现“遇到问题需要关闭”
来源:互联网 发布:淘宝联盟插件 编辑:程序博客网 时间:2024/06/16 23:36
用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)。
将这个类加入到一个现有的、带有窗体的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)。
- 用API写的VB6 的串口类,出现“遇到问题需要关闭”
- word遇到问题需要关闭的解决
- Word遇到问题需要关闭的解决办法
- Adobe有些软件出现“遇到问题需要关闭”问题的解决办法
- 解决IE经常出现“Microsoft Internet Explorer遇到问题需要关闭……”的信息提示
- 解决:浏览页面时,出现"WebDev.WebServer.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。"问题
- 测试的时候浏览出现 "WebDev.WebServer.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。
- “Word遇到问题需要关闭”的修复方法
- 编译器&调试---emulator.exe 遇到问题需要关闭 的解决办法
- “Microsoft Office Word 遇到问题需要关闭”的解决方法
- Microsoft Office Word遇到问题需要关闭的问题解决
- “Microsoft Office Word 遇到问题需要关闭”的解决办法
- Qt下写GSM串口遇到的问题。
- 关于http://code.google.com/p/android-serialport-api/有个可读写串口的API 遇到的问题以及解决办法
- VC6.0用file->open后,出现“MSDEV.EXE-应用程序错误 遇到问题需要关闭“
- 用API打开关闭串口的编程方法
- msp430串口遇到的问题
- mini2440 串口遇到的问题
- asp.net控件开发基础(1)
- 讨论:响一声就挂吸费电话频遭投诉 回拨话费被扣数百
- 我只在乎你
- 如何写IT招聘
- 从WORD文本生成相应的HTML网页
- 用API写的VB6 的串口类,出现“遇到问题需要关闭”
- 从网站上获取需要的数据实力(天气预报)
- 平淡生活:技术部年会
- 用SQL存储过程实现批量插入数据
- oracle 存储过程的基本语法
- exit () and return ()
- Oracle函数列表速查
- 最近CSDN上看到了一则被网友称为“最牛B”的一则招聘启事
- 2008,太阳能产业进入黄金期