我最近在用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
但實際寫程序過程中,有些情況我不可能預先定義好靜態數組,只能定義為動態數組,那該如何做才能寫入正確的值呢?

解决方案 »

  1.   

    将WriteFile中的第一个“Buffer1”改为Buffer1[Low(Buffer1)]再看看结果是否正确。—————————————————————————————————
    宠辱不惊,看庭前花开花落,去留无意;毁誉由人,望天上云卷云舒,聚散任风。
    —————————————————————————————————
      

  2.   

    楼上的方法可以.在这种情况下, 最好用
    PChar 来记录..
      

  3.   

    To lxpbuaa(桂枝香在故国晚秋):
       Thanks!