我的写com口的程序中有这么一段
procedure putb(b: byte; var ok: boolean);
var res: integer;
begin
  WriteFile(com, b, 1, res, nil);
  ok:=(res=1);
end;
可是编译的时候总是说
[Error] Types of actual and formal var parameters must be identical
我看了windows.pas中对WirteFile的定义是这样的:
function WriteFile(hFile: THandle; const Buffer; nNumberOfBytesToWrite: DWORD;var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;
Buffer竟然没有给出是什么类型的变量,这是怎么回事呢?我用的是Delphi 6.0

解决方案 »

  1.   

    Buffer 为指针,lpNumberOfBytesWritten 也是指针-----------------------------------
    现在混水园了!
      

  2.   


    WriteFile(com, @b, 1, res, nil);试一下。
      

  3.   

    VAR
      hcm:Thandle;
      hdcb:TDCB;
      num:DWORD;
      data: array[0..9] of Byte;
    begin
      hcm := CreateFile(nCommName,GENERIC_WRITE,0,nil,OPEN_EXISTING,0,0);
      zeromemory(@hdcb,sizeof(TDCB));
            hdcb.DCBlength := sizeof(TDCB);
            hdcb.BaudRate  := nBaudRate;
            hdcb.ByteSize  := 8;
            hdcb.Parity    := NOParity;
            hdcb.StopBits  := ONESTOPBIT;
            if (SetCommState(hcm,hdcb)) then
            begin        
              FOR I:=0 TO 9 DO
              begin            
                WriteFile(hcm,data[I],1,num,nil);
              end;
            end;
          finally        
            CloseHandle(hcm);       
          end;
    end;
      

  4.   

    找到原因了,原来是因为res必须是DWORD,定义成Integer不行。