用API写的VB6 的串口类,出现“遇到问题需要关闭”
2008-01-25 09:32
806 查看
用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)。
相关文章推荐
- 解决:浏览页面时,出现"WebDev.WebServer.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。"问题
- 在VC6.0用file->open后,出现“MSDEV.EXE-应用程序错误 遇到问题需要关闭。
- Windows Live 2009出现“Windows live communications platform 遇到问题需要关闭”无法登陆的问题
- 解决IE经常出现“Microsoft Internet Explorer遇到问题需要关闭……”的信息提示
- VS2003启动时出现“Microsoft Development Environment 遇到问题需要关闭”
- Office 2003 出现异常提示遇到问题需要关闭“ 发送错误报告 ”“ 不发送 ”“以安全模式启动”
- Adobe有些软件出现“遇到问题需要关闭”问题的解决办法
- VC6.0用file->open后,出现“MSDEV.EXE-应用程序错误 遇到问题需要关闭“
- 测试的时候浏览出现 "WebDev.WebServer.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。
- 解决:浏览页面时,出现"WebDev.WebServer.exe 遇到问题需要关闭。我们对此引起的不便表示抱歉。"问题
- VC6.0打开文件,出现“MSDEV.EXE-应用程序错误 遇到问题需要关闭
- 解决WINXP系统开机后弹出Generic host process for win32 services 遇到问题需要关闭!
- IIS错误.COM Surrogate 遇到问题需要关闭
- Microsoft Office Word 遇到问题需要关闭。我们对此引起的不便表示抱歉。
- “Microsoft Office Word 遇到问题需要关闭”的解决方法
- word遇到问题需要关闭的解决
- 打开某个AVI文件,explorer.exe遇到问题需要关闭的解决方法
- 关于http://code.google.com/p/android-serialport-api/有个可读写串口的API 遇到的问题以及解决办法
- Generic Host Process for Win32 Services 遇到了一个问题,需要关闭
- Microsoft Visual Studio 遇到了问题,需要关闭的一种可能的解决方法(转载)