jiechen111
驱动牛犊
驱动牛犊
  • 注册日期2005-02-01
  • 最后登录2005-02-25
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:3815回复:2

关于createfile的一个很棘手的串口通信问题,请求高手给我指教

楼主#
更多 发布于:2005-02-02 18:04
我用vb6.0调用人家写的动态库做了个串口通信的程序,但是我的串口通信程序在Win2000里完全可以用但是到了win98里怎么运行程序就弹出对话框为“无法打开串口”,这是为什么啊?请各位高手指教一下,谢谢!
VB写的关于串口的程序如下:
Private Sub StartCom
     Const GENERIC_READ=&H80000000
     Const GENERIC_WRITE=&H40000000
     Const OPEN_EXISTING=3
     Const FILE_ATTRIBUTE_NORMAL=&H80
     Dim SecurityA As SECURITY_ATTRIBUTES

    
    Dim Temp(5) As String
    FIleName for inpute Lock Read Write As #1
    on Error Resume Next
    Input #1, temp(0),temp(1),temp(2),temp(3),temp(4)
    Close #1

   select case(temp(3))
   Case 0:hCom=CreateFile("COM1",GENERIC_READ OR GENERIC_WRITE,0,SECURITYA,OPEN_EXISTING,FILE_ATTRIZBUTE_NORMAL,0)
   Case 1:hCom=CreateFile("COM2",GENERIC_READ OR GENERIC_WRITE,0,SECURITYA,OPEN_EXISTING,FILE_ATTRIZBUTE_NORMAL,0)
   Case 2:hCom=CreateFile("COM3",GENERIC_READ OR GENERIC_WRITE,0,SECURITYA,OPEN_EXISTING,FILE_ATTRIZBUTE_NORMAL,0)
   Case 3:hCom=CreateFile("COM4",GENERIC_READ OR GENERIC_WRITE,0,SECURITYA,OPEN_EXISTING,FILE_ATTRIZBUTE_NORMAL,0)
   Case 4:hCom=CreateFile("COM5",GENERIC_READ OR GENERIC_WRITE,0,SECURITYA,OPEN_EXISTING,FILE_ATTRIZBUTE_NORMAL,0)
   Case 5:hCom=CreateFile("COM6",GENERIC_READ OR GENERIC_WRITE,0,SECURITYA,OPEN_EXISTING,FILE_ATTRIZBUTE_NORMAL,0)
  Case 6:hCom=CreateFile("COM7",GENERIC_READ OR GENERIC_WRITE,0,SECURITYA,OPEN_EXISTING,FILE_ATTRIZBUTE_NORMAL,0)
  Case 7:hCom=CreateFile("COM8",GENERIC_READ OR GENERIC_WRITE,0,SECURITYA,OPEN_EXISTING,FILE_ATTRIZBUTE_NORMAL,0)
  Case 8:hCom=CreateFile("COM9",GENERIC_READ OR GENERIC_WRITE,0,SECURITYA,OPEN_EXISTING,FILE_ATTRIZBUTE_NORMAL,0)
  Case 9:hCom=CreateFile("COM10",GENERIC_READ OR GENERIC_WRITE,0,SECURITYA,OPEN_EXISTING,FILE_ATTRIZBUTE_NORMAL,0)
  Case 10:hCom=CreateFile("COM11",GENERIC_READ OR GENERIC_WRITE,0,SECURITYA,OPEN_EXISTING,FILE_ATTRIZBUTE_NORMAL,0)
  Case 11:hCom=CreateFile("COM12",GENERIC_READ OR GENERIC_WRITE,0,SECURITYA,OPEN_EXISTING,FILE_ATTRIZBUTE_NORMAL,0)
  end select
  if hcom=-1 then
     i=MSGBOX("无法打开串口",vbOKONLY,"错误"
     StatusBar1.Panels(1).Text="无法打开串口!"
  else: if iniCom(hcom,Temp(0),8,temp(1),temp(2),Temp(4)=False Then
             i=MsgBOX("串口初始化失败",vbOKONLY,"错误")
             StatusBar1.Panels(1).Text="串口初始化失败!"
             CLoseHandle(hCom)
        else:
           StartCom.Enabled=False
           playCommand.Enabled=False
           stopcom.Enabled=true
           stopcommand.enabled=true
           Combo1.Enabled=True
           searchadd.Enabled=True
           StatusBAR1.Panels(1).Text="串口已成功打开!"
           searchAdd_Click
        end if
end sub

调用的动态库程序如下:
extern"C"_declspec(dellexport)BOOL IniCom(HANDLE hCom, long Baurate,short DataBits,short Parity,short StopBits,short TimeOut)
{
  DCB dcb
  COMMTIMEOUTS CommTime;
  BOOL Error=TRUE;
  
 
  if(hCom==INVALID_HANDLE_value)
  {
    //MessageBox(NULL,"无法打开串口!   " ,"故障",MB_IConERROR);
  return FALSE;
  }
  Error=SetupComm(hCom,1024,1024);
  if(!Error)
  {
   //MessageBox(NULL,"设定串口缓冲区时出错!   " ,"故障",MB_IConERROR);
     return False;
  }
  GEtCommTimeots(hcom,&CommTimes);
  CommTimes.ReadIntervalTimeout=0x00;//间隔超时(mS);0为不使用
  commTimes.ReadTotalTimeoutMultiplier=0X01;//乘量(mS);总超时=乘量*字节+常量
  commTimes.ReadTotalTimeoutConstant=TimeOut;//OX64;//常量(ms)
  Error=SetcommTimeouts(hCom,&CommTimes);
  if(!Error)
  {
    //MessageBox(NULL,"设定串口读写超时时出错!   " ,"故障",MB_IConERROR);
    return FALSE
    }
  Error=GetCommState(hcom,&dcb);
  if (!ERROR)
  {
   //MessageBox(NULL,"读写串口参数时出错!   " ,"故障",MB_IConERROR);
   return FALSE
  }
 /********初始化串口参数**********/
 dcb.BaudRate=BaudRate;
 dcb.ByteSize=DataBits;
 dcb.PArity=Parity;
 dcb.StopBits=StopBits;
/*********结束*******************/
Error=setCommState(hCom,&dcb);
if(!ERROR)
 {
  //MessageBox(NULL,"设定串口参数时出错!   " ,"故障",MB_IConERROR);
  return FASE
  }
  rturn TRUE;
}


我的email为:jiechen111@163.com,请各位高手联系我,给点解决问题的方法的建议我,谢谢!

xbzjackey
驱动小牛
驱动小牛
  • 注册日期2002-12-27
  • 最后登录2016-01-07
  • 粉丝0
  • 关注0
  • 积分5分
  • 威望34点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-02-02 18:07
打开串口时最好加上全名,比如打开COM10时,应这样写:
CreateFile("\\\\.\\COM10",....);











回答正确,不要忘了给分哦!

[编辑 -  2/2/05 by  xbzjackey]
回答好的不要忘了给分哦。。。
AllenZh
驱动老牛
驱动老牛
  • 注册日期2001-08-19
  • 最后登录2015-11-27
  • 粉丝19
  • 关注10
  • 积分1316分
  • 威望2387点
  • 贡献值7点
  • 好评度321点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-02-03 22:16
打开串口时最好加上全名,比如打开COM10时,应这样写:
CreateFile("\\.\COM10",....);
哈哈,就是这样,设备名给错了










回答正确,不要忘了给分哦!

[编辑 -  2/2/05 by  xbzjackey]
1,承接Windows下驱动/应用开发 2,本人原创虚拟鼠标/键盘,触摸屏,虚拟显卡,Mirror驱动,XP无盘的SCSI虚拟磁盘驱动等 3,windows下有尝技术服务(包括BUG调试,员工培训等) 欢迎深圳和海外企业联系.msn:mfczmh@sina.com
游客

返回顶部