線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:3537
推到 Plurk!
推到 Facebook!

關於信用卡機連結

答題得分者是:DavidLo
jhlin88
一般會員


發表:21
回覆:28
積分:9
註冊:2002-10-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-10-07 15:47:43 IP:211.23.xxx.xxx 未訂閱
抱歉請教一下各位大大:   小弟最近要在程式裡面與信用卡機連結,附上的說明裡面,有提到只要送一個 字串透過rs232的方式傳輸。傳送的規格如下: [data] lrc有一段解釋:Exclusive-Or All Bytes of Data & Etx 小弟自行參閱站上文章,透過自行呼叫api的方式,程式碼如下: 寫到這兒,產生兩個問題: 一、lrc要如何做?裡面小弟寫了一段,不知道是不是有搞錯意思 二、 >
------
JamesLin
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-10-07 16:54:58 IP:218.94.xxx.xxx 未訂閱
关于COM通讯指令不同设备都不同,您可以参考相关资料    而Com api send date 方式如下:    
function TCommDriverClass.SendData(lpBuf: pByte; Maxlen: DWORD): Integer;
var
  bWrite: Boolean;
  dwLen: DWORD;
  comstat: TCOMSTAT;
  dWrite: DWORD;
  dwError: DWORD;
begin
  dwLen := 0;
  dWrite := 0;
  ClearBuffer(False,True); //清除缓冲
  ClearCommError(m_hCom, dwError, @comstat);
  bWrite := WriteFile(m_hCom, lpBuf^, Maxlen, dwLen, @m_WriteOlp);
  if not bWrite then
  begin
    if (GetLastError = ERROR_IO_PENDING) then
    begin
      while (not GetOverlappedResult(m_hCom, m_WriteOlp, dWrite, True)) do
      begin
        if (GetLastError = ERROR_IO_INCOMPLETE) then
        begin
          dwLen := dwLen   dWrite;
          Continue;
        end
        else
        begin
          ClearCommError(m_hCom, dwError, @comstat);
          Break;
        end;
      end;
      dwLen := dwLen   dWrite;
    end
    else
    begin
      ClearCommError(m_hCom, dwError, @comstat);
    end;
  end;
  Result := dwLen;
end;
风花雪月 e梦情缘 网络代号:wnhoo or sos_admin 网名:e梦缘 Mail:wnhoo@163.com
jhlin88
一般會員


發表:21
回覆:28
積分:9
註冊:2002-10-17

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-10-11 11:01:02 IP:211.23.xxx.xxx 未訂閱
感謝sos大大的幫忙,不過大大提供的部份似乎與小弟想要問的二個問題沒啥關係,例如第二個問題, S := PCHAR(CHR($02) S CHR($03) S1); WriteFile(aHandle, S , 290, lrc, nil); 小弟想知道上面的型態要如何實作(因為編譯一直出現問題) 第一個問題是如果要將一個144byte的字串與某個數值做 xor,要如何撰寫? s1 := s; //取得lrc的值 for i := 0 to length(s) - 1 do begin bb := byte(s[i]); s1[i] := chr(bb xor 3); end; 感恩大大的回覆喔… 寫程式是為了讓生活更精彩
------
JamesLin
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-10-11 13:14:04 IP:218.94.xxx.xxx 未訂閱
感謝sos大大的幫忙,不過大大提供的部份似乎與小弟想要問的二個問題沒啥關係,例如第二個問題, S := PCHAR(CHR($02) + S + CHR($03) + S1); WriteFile(aHandle, S , 290, lrc, nil); 小弟想知道上面的型態要如何實作(因為編譯一直出現問題) ============================================================ 你没有仔细看我提供的程式,上面明明写着通过Api发送到串口数据形态. WriteFile() 功能:来将资料写入Serial port. 函数原型: BOOL WriteFile( HANDLE hFile, // handle to file to write to LPCVOID lpBuffer, // pointer to data to write to file DWORD nNumberOfBytesToWrite, // number of bytes to write LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written LPOVERLAPPED lpOverlapped // pointer to structure needed for overlapped I/O ); 说明: ReadFile函数只要在串行口输入缓冲区中读入指定数量的字符,就算完成操作。 而WriteFile函数不但要把指定数量的字符拷入到输出缓冲中,而且要等这些字符从串行口送出去后才算完成操作。 ============================================================== 第一個問題是如果要將一個144byte的字串與某個數值做 xor,要如何撰寫? s1 := s; //取得lrc的值 for i := 0 to length(s) - 1 do begin bb := byte(s[i]); s1[i] := chr(bb xor 3); end; ================================================ var buf:array[0..254] of Byte; i:Integer; begin FillChar(buf,High(buf),99); for i:=Low(buf) to High(buf) do buf[i]:=buf[i] xor 3; end; 风花雪月 e梦情缘 网络代号:wnhoo or sos_admin 网名:e梦缘 Mail:wnhoo@163.com
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-10-11 21:37:47 IP:218.169.xxx.xxx 未訂閱
Hello!    1.LRC是checksum用.應是針對(Data[]+ETX)作XOR的結果.   Data=Data[0];   for(i=1;i
DavidLo
高階會員


發表:17
回覆:225
積分:168
註冊:2004-07-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-10-11 23:49:17 IP:218.169.xxx.xxx 未訂閱
引言: Hello! 1.LRC是checksum用.應是針對(Data[] ETX)作XOR的結果. Data=Data[0]; for ( i=1; i < length; i ) Data = Data xor Data[i]; LRC=Data xor ETX; 2.在將 (header data if need) Data[] ETX LRC (tail data if need) 送到前端設備.
jhlin88
一般會員


發表:21
回覆:28
積分:9
註冊:2002-10-17

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-10-12 09:13:30 IP:211.23.xxx.xxx 未訂閱
感謝David大大的解答,原來是如此做,懂了 寫程式是為了讓生活更精彩
------
JamesLin
系統時間:2024-04-26 16:35:22
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!