我最近在用Delphi寫串口通信的程序,因為要向串口緩沖區寫入數據,所以碰到這樣的一個問題:
有一個Buffer,我先定義為動態數組,再SetLength,依次給各元素賦值,誰知把這個動態數組寫到緩沖區后,我用監聽軟件測到我所發的值居然不是我寫入的值:
例:
Var
Buffer1:Array of Char;
Buffer2:Array[0..2] of Char;
num:Integer;
begin
Setlength(Buffer1,3);
Buffer1[0]:=#$00;
Buffer1[1]:=#$01;
Buffer1[2]:=#$02; Buffer2[0]:=#$00;
Buffer2[1]:=#$01;
Buffer2[2]:=#$02;
If InitialPort then
Begin
If WriteFile(hcom,Buffer1,High(Buffer1)+1,cardinal(num),over) Then
ShowMessage(inttostr(num)); End;
ClosePort;
end;
監聽到我寫入:90 37 BD 如果程序不變,只把寫入Buffer1改為Buffer2的話,值就正確:00 01 02
但實際寫程序過程中,有些情況我不可能預先定義好靜態數組,只能定義為動態數組,那該如何做才能寫入正確的值呢?
有一個Buffer,我先定義為動態數組,再SetLength,依次給各元素賦值,誰知把這個動態數組寫到緩沖區后,我用監聽軟件測到我所發的值居然不是我寫入的值:
例:
Var
Buffer1:Array of Char;
Buffer2:Array[0..2] of Char;
num:Integer;
begin
Setlength(Buffer1,3);
Buffer1[0]:=#$00;
Buffer1[1]:=#$01;
Buffer1[2]:=#$02; Buffer2[0]:=#$00;
Buffer2[1]:=#$01;
Buffer2[2]:=#$02;
If InitialPort then
Begin
If WriteFile(hcom,Buffer1,High(Buffer1)+1,cardinal(num),over) Then
ShowMessage(inttostr(num)); End;
ClosePort;
end;
監聽到我寫入:90 37 BD 如果程序不變,只把寫入Buffer1改為Buffer2的話,值就正確:00 01 02
但實際寫程序過程中,有些情況我不可能預先定義好靜態數組,只能定義為動態數組,那該如何做才能寫入正確的值呢?
解决方案 »
- fastreport丢失文本内容
- 求: Delphi系统开发实例精粹 CD内容的下载地址....
- 谁能解决谁就是第一(打印自认为是高手的进来)
- 谁知道这个DLL代码哪里错了
- DELPHI的JPEG的SAVETOFILE函数是不是有问题啊?
- 数据库开发的问题!来者有分,不够再加!
- 我的blockWrite()为什么会报EI/O error???
- 请问有没有什么Delphi函数参考手册的好书,介绍一下!
- DELPHI中如何消除和减少调试中的死机情况
- delphi xe10 utf8 解码问题
- 怎么样对定义 BLOB SUB_TYPE TEXT SEGMENT SIZE 80 NOT NULL 的类型插入数据
- 求 UltraEdit-32 的注册码 ,谢谢
宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
—————————————————————————————————
PChar 来记录..
Thanks!