經由SPComm所接收的資料存檔時機 |
尚未結案
|
hwangtc
一般會員 發表:1 回覆:3 積分:0 註冊:2002-06-27 發送簡訊給我 |
|
shaofu
高階會員 發表:5 回覆:136 積分:103 註冊:2003-01-07 發送簡訊給我 |
|
hwangtc
一般會員 發表:1 回覆:3 積分:0 註冊:2002-06-27 發送簡訊給我 |
|
shaofu
高階會員 發表:5 回覆:136 積分:103 註冊:2003-01-07 發送簡訊給我 |
|
hwangtc
一般會員 發表:1 回覆:3 積分:0 註冊:2002-06-27 發送簡訊給我 |
謝謝shaofu
我原先是這樣寫的
procedure TForm1.FormCreate(Sender: TObject);
begin
file_name:='c:\temp\AAA.BBB';
Comm1.StartComm;
end; procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
var
s:string;
fFILE:File;
ByteWrite:integer;
begin
AssignFile(fFILE,file_name); // 版本二
SetLength(S, BufferLength);
Move(Buffer^, PChar(S)^, BufferLength); if fileexists(file_name) then reset(fFILE,1) else rewrite(fFILE,1);
seek(fFILE,filesize(fFILE));
// 版本二
BlockWrite(fFILE,PChar(s)^,length(s),ByteWrite); // 版本一
// BlockWrite(fFILE,PChar(Buffer),BufferLength,ByteWrite); CloseFile(fFILE);
end;
原先用版本一有問題,在猜想是不是可能TIMEOUT或RETRY或其它問題
(我知道的相當有限)
後來再依shaofu所提供的方向再從新思考
用版本二確是可行
再略加修改(如:s:=s #0;)
就可發現 4K Buffer 是蠻足夠了 再次謝謝shaofu
|
shaofu
高階會員 發表:5 回覆:136 積分:103 註冊:2003-01-07 發送簡訊給我 |
|
hwangtc
一般會員 發表:1 回覆:3 積分:0 註冊:2002-06-27 發送簡訊給我 |
謝謝shaofu的指正
我已經被指標,變數...搞混了
基本概念都沒釐清
不曉得我說的對不對,像:
procedure BlockWrite(var f: File; var Buf; Count: Integer [; var AmtTransferred: Integer]);
其中var Buf,要給的是變數'實體'或陣列,而不是指標
而我下了PChar(Buffer)是因為:
procedure TForm1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
BufferLength: Word);
Buffer: Pointer是未定型態指標,我才會用PChar強制轉型,給果還是失敗
經用shaofu所提的 Buffer^ (取得變數實體??),經測試後確是可行 謝謝!!
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |