软件注册站
热情软件屋

 
MSComm无法在中文Windows 95下传递二进制数据
编号: QA000388    
建立日期: 1999年1月22日 最后修改日期: 1999年10月15日
所属类别: Visual Basic - 网络与通信
   
    工具:VB5
    操作系统: WIN95
    本人在利用VB5的串行通信口控件(MSComm)进行通信时发现无法正确发送ASCII值>128的字符,或者说无法发送二进制数。具体情况是:用另外一台微机监视由VB5发送来的字符,并显示字符和ASCII值。当用函数chr$(>128)发送时,收到的字符的ASCII值却是0,如果用函数chrw(>128)发送时,收到值是63。监视程序是QuikBasic7.1编写的。发送程序部分属性如下:
     MSComm1.settings="4800,n,8,1"
     MSComm1.inputlen=1
     MSComm1.PortOpen=Ture
     MSComm1.InputMode=comInputModeBinary(黄建军)
   
    这是VB的问题。VB的MSComm在中文Windows下(确切地说是在所有DBCS系统下)无法传递二进制数据。你可以参考微软的Knowledge Base的文章:“Q151899 Transmitting and Receiving Binary Data with MSComm Control”,它解释了原因。在QA000051 "VB 5提示错误:"输入超出文件尾""中,我也解释了VB在中文Windows下是怎么处理字符串的。
    一种办法是将>128 位的数据放入声明为 Byte数组里发送, 接受端再取出来。如:
    接收:
    Dim v As Variant
    v = MSComm1.Input
    For i = 0 To MSComm1.InBufferCount - 1
     Debug.Print v(i)
    Next
    发送:
    Dim v(10) As Byte
    ......
    MSComm1.Output = CVar(v)
    另一种办法是直接调用API,这里有一篇文章mscomm.zip可以参考。
    
    相关书籍:
    《Visual Basic串口通信与测控应用技术实战详解(附光盘)》
    《Visual Basic 串口通信技术与典型实例(附CD-ROM盘一张)》

    

此问题由lzzww、李海回答。

附加关键字:编程, 源程序, programming, source code, Visual Basic, VB, 网络与通信, network, communicate, com, com1, com2

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio