在调用
function WriteFile(hFile: THandle; const Buffer; nNumberOfBytesToWrite: DWORD;
  var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;
有个问题var
  str:string;
begin
WriteFile(hFile,pchar(str)^nBytes,lcb,nil);
        //为什么此处是pchar(str)^而不是pchar(str)
end;

解决方案 »

  1.   

    pchar(str)^ 代表str的内容
    pchar(str)  代表str的地址
    你的定义是const buffer,当然是内容
    如果你的定义是 
    BOOL WriteFile(    HANDLE hFile, // handle to file to write to 
        LPCVOID lpBuffer, // pointer to data to write to file 
        DWORD nNumberOfBytesToWrite, // number of bytes to write 
        LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written 
        LPOVERLAPPED lpOverlapped  // pointer to structure needed for overlapped I/O
       );lpcvoid就是个指针就应该 pchar(str)
      

  2.   

    同意。另外在用stream是也经常有这个问题的
      

  3.   

    function WriteFile(hFile: THandle; const Buffer; nNumberOfBytesToWrite: DWORD;
      var lpNumberOfBytesWritten: DWORD; lpOverlapped: POverlapped): BOOL; stdcall;上面的是delphi中的原型; 可以看到buffer的定义
     const Buffer 不是指针.
    当然,delppi编译器在连接windows库的时候会转换成指针的,因为const指定了必须按地址传送。
      

  4.   

    pchar(str)^是你自已定义的吧,它的作用和@str[1]是一样的,你最好直接调用api中的writefile.
      

  5.   

    pchar(str)是一个指向字符串的指钟,@str[1]是你字符串内容的存放地址