移植一个VB6可以正常操作的CH341DLL,移植到VB2010出现的数据读写错误的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了移植一个VB6可以正常操作的CH341DLL,移植到VB2010出现的数据读写错误的问题相关的知识,希望对你有一定的参考价值。
VB6是官方提供的程序
移植到VB2010时,由于Type需要改为structure,而structure中,不能定义数组的大小
两个程序的区别在于
=======================VB6中的public定义========================
Type arrRBuffer
buf(4095) As Byte
End Type
Public Declare Function CH341StreamI2C Lib "CH341DLL.DLL" (ByVal iIndex As Long, ByVal iWriteLength As Long, ByRef iWriteBuffer As arrRBuffer, ByVal iReadLength As Long, ByRef oReadBuffe As arrRBuffer) As Boolean
===========================输出结果===================
&***************************VB2010的定义***********************
Public Structure arrRBuffer
Public buf() As Byte
End Structure
Public Declare Function CH341StreamI2C Lib "CH341DLL.DLL" (ByVal iIndex As Integer, ByVal iWriteLength As Integer, ByRef iWriteBuffer As arrRBuffer, ByVal iReadLength As Integer, ByRef oReadBuffe As arrRBuffer) As Boolean
********************输出结果******两个不同的波形**************************
写的数据都是380102,VB6是正确的,VB2010确不对
两个程序最大的区别就是那个结构体的定义
我猜想,会不会是那个DLL里面的数据结构与structure定义的不同
在VB2010中, ReDim buffer.buf(4),buff的长度我也换过很多个数值,比如 ReDim buffer.buf(4095),ReDim buffer.buf(4096),ReDim buffer.buf(2),ReDim buffer.buf(3)等
确实每次换不同的长度,输出的波形会有差异
修改函数
Public Declare Function CH341StreamI2C Lib "CH341DLL.DLL" (ByVal iIndex As Integer, ByVal iWriteLength As Integer, ByRef iWriteBuffer() As Byte, ByVal iReadLength As Integer, ByRef oReadBuffe() As Byte) As Boolean
只接用数组试下看可以行的通不
试验2
Structure arrRBufferPublic buf() As Byte
Sub New(ByVal blen As Integer)
ReDim buf(blen)
End Sub
End Structure
可以 直接 dim a as new arrRBuffer(4095)
如果这样不行 ....
那你就可以 调试一下 看一下返回的数据是不是一样 .看是不是其它代码的问题
追问这两个方法,我之前都试过了,问题是一样的,我明天再测试一遍看看
修改后,还是一样的问题,感觉是访问的不是同一个地址
方法一的测试结果
方法二的测试结果
重新打开一下程序,后面两个字节的数据又变了
以上是关于移植一个VB6可以正常操作的CH341DLL,移植到VB2010出现的数据读写错误的问题的主要内容,如果未能解决你的问题,请参考以下文章