LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1485|回复: 0

串口打印机编程,求救

[复制链接]
发表于 2006-1-6 12:47:16 | 显示全部楼层 |阅读模式
以下是测试打印机状态(kylix写的),打印都正常,就是isready不行,大家帮看看

print(s)就是往串口写字符串,win32代码正常,linux下我写的有什么问题?

  1. function TComPrinter.IsReady: boolean;

  2. {$IFDEF Win32}
  3. var
  4.   dStart: DWORD;
  5.   s: string;

  6.   dwErrors, dwRead: DWORD;
  7.   comstat: PComStat;

  8.   Data: Shortint;

  9. begin
  10.   result := false;
  11.   if Copy(LowerCase(PrintCfg.Name), 1, 3) = 'mdt' then
  12.   begin
  13.     StopCom;
  14.     StartCom;
  15.     iniPrinter;
  16.   end;
  17.   s := PrintCfg.GetRealCmd(PrintCfg.ChkStatus);
  18.   new(comstat);
  19.   try
  20.     dStart := GetTickCount;
  21.     while true do
  22.     begin
  23.       if ClearCommError(hCommFile, dwErrors, comstat) then

  24.         if not (fCtlHold in comstat.Flags) then
  25.           break;
  26.       if (GetTickCount - dStart) > 100 then
  27.         exit;
  28.     end;

  29.     if not Print(s) then
  30.       exit;
  31.     while true do
  32.     begin
  33.       ClearCommError(hCommFile, dwErrors, comstat);
  34.       if comstat.cbInQue > 0 then
  35.         break;
  36.       if (GetTickCount - dStart) > 200 then
  37.         exit;
  38.     end;
  39.     Data := 0;

  40.     if not ReadFile(hCommFile, Data, 1, dwRead, nil) then
  41.     begin
  42.       ClearCommError(hCommFile, dwErrors, comstat);
  43.       exit;
  44.     end;

  45.   finally
  46.     Dispose(comstat);
  47.   end;
  48.   if Copy(LowerCase(PrintCfg.Name), 1, 3) = 'mdt' then
  49.     Result := Data = strtoint('$' + PrintCfg.PaperErr)
  50.   else
  51.     result := (Data and strtoint('$' + PrintCfg.PaperErr)) = 0;
  52. end;
  53. {$ENDIF}
  54. {$IFDEF Linux}
  55. var
  56.   s:string;
  57.   Data:Shortint;
  58.   tpstart, tpend: timeval;
  59.   timeuse: real;

  60. begin
  61. //  result:=true;
  62. //  exit;
  63.   result := false;
  64.   if Copy(LowerCase(PrintCfg.Name), 1, 3) = 'mdt' then
  65.   begin
  66.     StopCom;
  67.     StartCom;
  68.     iniPrinter;
  69.   end;
  70.   s := PrintCfg.GetRealCmd(PrintCfg.ChkStatus);
  71.   if not Print(s) then
  72.     exit;
  73.   gettimeofday(tpstart, nil);
  74.   while __read(hCommFile,Data,1)<1 do
  75.   begin
  76.     gettimeofday(tpend, nil);
  77.     timeuse := 1000000 * (tpend.tv_sec - tpstart.tv_sec) +
  78.       tpend.tv_usec - tpstart.tv_usec;
  79.     timeuse := timeuse / 1000000;
  80.     if timeuse>200 then
  81.       exit;
  82.   end;
  83.   if Copy(LowerCase(PrintCfg.Name), 1, 3) = 'mdt' then
  84.     Result := Data = strtoint('$' + PrintCfg.PaperErr)
  85.   else
  86.     result := (Data and strtoint('$' + PrintCfg.PaperErr)) = 0;

  87. end;
  88. {$ENDIF}
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表