小弟我操作的是明华IC兼容卡机。。插入西门子4442卡,最普通的了现在我遇到一个问题就是A窗体已经打开了串口和读取IC卡的数据,这个没问题,我现在就是想在打开A窗体的同时,也要同时打开B窗体,B窗体也要读取IC卡机和IC卡的数据,不过现在打开A窗体的同时再打开B窗体,B窗体就显示串口被占用
各位大哥有没有什么好的办法可以共享串口设备数据呢??

解决方案 »

  1.   

    创建一个对象和COM交互.其它操作都通过这个对象进行.
      

  2.   


    饿。。小弟我不太明白,只是初学者,可以说的清楚点么?我下面贴下代码以下贴的是根据明华IC卡的DEMO写的
    打开串口begin
      icdev:=auto_init(0,9600); //初始化串口一,并将读写器波特率设为9600
    if icdev<=0 then
      begin
      showmessage('IC卡机连接失败,请检查。');
      end;
    end;
    读取卡数据begin
    status:=0;
    st:=get_status(icdev,@status);       //检测读写器中是否有卡,
    if status=0 then                         //status=0表示无卡,=1表示有卡;
     begin
      pnl1.Caption:='请插入IC卡';
      exit;
    end
    else
     password:='ffffff';
     st:=asc_hex(password,password1,3);
     st:=csc_4442(icdev,3,password1);
     offset:=32;                            //以ASC形式读写
     length:=6;                             //读取6位
     st:=srd_4442(icdev,offset,length,data2);
     edt2.Text:=data2;
     pnl1.Caption:='插入正确';
     //a:=data2;
    end;
      

  3.   

    第一种可能:
    你用的是读卡器提供的API接口.那就没什么问题。A,B窗口随便用,只是调函数而已嘛.第二种可能:
    你自己用的三方组件去读写串口:
    不要创建两个读写串口的组件对象.用一个就行了.
    要么把它设置为全局对象,要么放到某一个窗口中(如A),另一个窗口(B)要读写数据时,直接使用A中的组件对象.不要再弄另一个去打开串口.第三种可能:
    直接用的windows API去操作串口:
    跟第一种情况类似