在调用
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;
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;
解决方案 »
- 'Array' and 'String'
- delphi7.0中能否定义treeview的节点数组啊
- 如何获得excel 的最 大 的 有效 行 和 列 数???
- WININET API开发
- 我做了一个dll,文件为cstprice.dll,但在调用时报如下错,怎样解决?
- 如何使用系统已经注册的DLL文件中的类
- zhu8888一步一步住前走来接这100分。我是守信的。
- 您好,delphi下怎样做报表?
- 关于控件版本造成执行文件包错
- 在C/S结构中中间层中的*.tlb中在定义参数类型中,type的下拉框中有许多的类型,可我怎么找不到一个string的?
- 请问用NMUDP控件发送结构体类型信息的时候该怎么发送,我得不对阿~!
- 资源文件的问题
你传过的只是变量的地址。
在WriteFile内部实际上用了@Buffer,
若传PChar(Str)^的话,@(PChar(Str)^) 正好为PChar(Str)自身。
p:pchar;
str:string;
p:=pchar(str);
str存放一个32位的地址,指向一个字符串。pchar(str)返回改字符串的首地址。
WriteFile(hFile,pchar(str)^,nBytes,lcb,nil);
相当于
WriteFile(hFile,p^,nBytes,lcb,nil);
pchar(str)^,估计是编译器自己模拟了一个指针。(:)不知道怎么表达)。
pchar(str),直接把返回的32位地址传过去。