SPCOMM如何傳送byte資料而非PChar |
答題得分者是:jow
|
rover_kung
一般會員 發表:1 回覆:3 積分:0 註冊:2003-11-14 發送簡訊給我 |
各位前輩:
小弟有一簡單的程式要送一訊號至RS232,程式如下 procedure TfmRS232.Button2Click(Sender: TObject); var vParam: PChar; begin vParam:=PChar(Edit1.Text); Comm1.WriteCommData(vParam,Length(vParam)); end; end; 因RS232要求的訊號為1 byte的資料, 但Edit1.txt為文字, 且WriteCommData的參數1為PChar型態 如果我要送一資料為 123,WriteCommData會把123當成3個字元送出, 不知如何把 123當成1byte 送到RS232, 拜託大家了!! |
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
[code delphi] procedure TForm1.Button1Click(Sender: TObject); procedure WriteCommData(c: PChar; len: Integer); begin ShowMessage(Format('c=%s, len=%d',[c[0], Length(c[0])])); //或 ShowMessage(Format('c=%s, len=%d',[c^, Length(c^)])); end; var c: Char; begin //模擬將字串'123'轉換成數值,送到函式 WriteCommData(), 作進一步處理 Edit1.Text := '123'; c := char(StrToIntDef(Edit1.Text,0) mod 256); WriteCommData(@c,1); end; [/code] |
rover_kung
一般會員 發表:1 回覆:3 積分:0 註冊:2003-11-14 發送簡訊給我 |
|
rover_kung
一般會員 發表:1 回覆:3 積分:0 註冊:2003-11-14 發送簡訊給我 |
|
jow
尊榮會員 發表:66 回覆:751 積分:1253 註冊:2002-03-13 發送簡訊給我 |
首先來釐清一下你的需求,
(1)原帖提問: 將Edit1.Text 內含的字串,透過 Comm1.WriteCommData(vParam,Length(vParam)); 傳送到另一端. 如果,接收端收到長度等於3的字串 '123', 其實這是正確的. 我回帖中則是將'123'透過StrToIntDef()轉換成一個Byte數值(介於0~255) 然後將它送出. 所以如果傳輸正常,則接收端應該收到一個Byte(或Char)的資料. (2)GetMem() 是用來動態配置記憶體, 其相對釋放記憶體的動作為FreeMem() [code delphi] procedure TForm1.Button2Click(Sender: TObject); var S: string; P: PChar; Len: Integer; begin S := '12345'; GetMem(P,10); //配置記憶體 try FillChar(P^,10,0); //清除為零 Len := Math.Min(10,Length(S)); // Move(PChar(S)^, P^, Len); //將S內含值copy到P所指向的記憶體 ShowMessage('S=' S); //顯示原字串 ShowMessage('P^=' string(P)); //顯示複製的字串 finally FreeMem(P); //釋放記憶體 end; end; [/code] (3)資料傳輸,建議使用定義好的封包,這一篇是個人之前分享的小程式, 你可以參考相關做法... http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=90517 個人建議,謹供參考.......... |
rover_kung
一般會員 發表:1 回覆:3 積分:0 註冊:2003-11-14 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |