`
pascal4123
  • 浏览: 110750 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

在 API 函数中使用 PChar 参数的几种方法(转载自万一博客)

    博客分类:
  • GP
阅读更多
//以 GetWindowsDirectory 为例:

{ 以静态数组做缓冲区 }
procedure TForm1.Button1Click(Sender: TObject);
var
  buf: array[0..MAX_PATH-1] of Char;
begin
  GetWindowsDirectory(buf, SizeOf(buf));
  ShowMessage(buf); { C:\\WINDOWS }
end;

{ 自己分配内存 }
procedure TForm1.Button2Click(Sender: TObject);
var
  p: PChar;
begin
  p := StrAlloc(MAX_PATH);
  GetWindowsDirectory(p, StrBufSize(p));
  ShowMessage(p); { C:\\WINDOWS }
  StrDispose(p);
end;

{ 直接使用 string; 这和下一种方法都需要再删除尾部空白 }
procedure TForm1.Button3Click(Sender: TObject);
var
  str: string;
  len: Integer;
begin
  SetLength(str, MAX_PATH);
  len := GetWindowsDirectory(PChar(str), ByteLength(str));
  SetLength(str, len);
  ShowMessage(str); { C:\\WINDOWS }
end;

{ 同时, 把 PChar(str) 改为 @str[1] }
procedure TForm1.Button4Click(Sender: TObject);
var
  str: string;
  len: Integer;
begin
  SetLength(str, MAX_PATH);
  len := GetWindowsDirectory(@str[1], ByteLength(str));
  SetLength(str, len);
  ShowMessage(str); { C:\\WINDOWS }
end;

{ 这种方法最好, 先获取结果的长度... }
procedure TForm1.Button5Click(Sender: TObject);
var
  len: Integer;
  str: string;
begin
  len := GetWindowsDirectory(nil, 0);
  SetLength(str, len);
  GetWindowsDirectory(PChar(str), len);
  ShowMessage(str); { C:\\WINDOWS }
end;
分享到:
评论

相关推荐

    C语言中的回调函数实例

    在C语言中一般用typedef来为回调函数定义别名(参数名)。 别名通过宏定义typedef来实现,不是简单的宏替换。可以用作同时声明指针型的多个对象。 比如: 代码如下:char *pa,pb;//pa是一个char型指针,但pb是一个...

    delphi 下API函数写串口

    delphi 利用API函数写串口。 //建立串口句柄 CommHandle := CreateFile(PChar(ComboBox1.Text),GENERIC_WRITE or GENERIC_READ, 0,nil,OPEN_EXISTING,FILE_FLAG_OVERLAPPED or FILE_ATTRIBUTE_NORMAL,0); if ...

    java用JNA调用dll实例,包含各种参数调用

    实例中演示了各种参数形式的DLL函数调用,如:基本数据类型、基本数据类型的指针和引用、结构体、结构体的指针和引用、函数指针和回调函数、字符串指针、输入数组、输出数组等,非常实用。

    Delphi String类型和PChar类型使用的区别.rar

    Delphi 以实例演示String类型和PChar类型使用的区别,演示了PChar静态分配空间和PChar动态分配空间:  procedure TForm1.Button1Click(Sender: TObject);  var  PStr:array [0..100] of Char;  begin  StrPCopy...

    delphi中String,PChar,PByte,Array of Char,Array of Byte 互相转换

    delphi中String,PChar,PByte,Array of Char,Array of Byte 之间的互相转换

    Detours Express源码(微软API HOOK库)

    Detours是微软开发的一个函数库, 用于修改运行中的程序在内存中的影像,从而即使没有源代码也能改变程序的行为。具体用途是: 拦截WIN32 API调用,将其引导到自己的子程序,从而实现WIN32 API的定制。 为一个已在...

    delphi 开发经验技巧宝典源码

    0048 在过程中使用数组参数 31 0049 在过程中使用默认参数 31 2.4 其他 32 0050 如何在字符串中使用单引号 32 0051 结构对象的定义与使用 32 0052 使用数组为TlistView组件动态创建字段 33 0053 解决...

    delphi 开发经验技巧宝典源码06

    0048 在过程中使用数组参数 31 0049 在过程中使用默认参数 31 2.4 其他 32 0050 如何在字符串中使用单引号 32 0051 结构对象的定义与使用 32 0052 使用数组为TlistView组件动态创建字段 33 0053 解决...

    Delphi通过主机名获取IP

    很简单的一个例子,用delphi2010编写的,网上有的例子会出现网上的教程是Pchar(IPAddress) 这样会提示 Incompatible ... 函数里使用参数的时候,仍要注意pchar都要改成pansichar,代码修改量更小,且与旧版本更兼容。

    在Delphi中定义自己图标的消息框〖源代码〗

    修改方法:在WINDOWS单元中找到此函数后,把BOOL改为Integer,共有三处要修改,然后在Delphi安装路径Lib中找到WINDOWS.DCU文件,把它改名或者删除,并把修改后的WINDOWS.PAS源码复制到Lib路径中。 ---- 该函数只有...

    在同步代码结束后,使用ReleaseMutex(THandle

    注意除WaitForSingleObject()函数外,你还可以使用WaitForMultipleObject()和MsgWaitForMultipleObject()函数,它们可以等待几个对象变为发信号状态。这两个函数的详细情况请看Win32 API联机文档。 4、在同步...

    SPComm串口组件

    网上很多SPComm说能够兼容XE及以上版本,但是对发送字节流数据时PChar参数和字节大小不一致,在发送奇数个字节数据值有Bug,本文使用PAnsiChar替换PChar,解决兼容性问题(经过测试)。 备注:为了方便使用,请使用...

    Delphi2009、Delphi2010的GBK繁体转简体函数

    Delphi2007之前的API繁简转函数在Delphi2009版本出现后不能用,原因在于之前版本的String默认为AnsiString,而Delphi2007之后的String默认为WideString,同样,PChar指针也就为PAnsiString,所以调用Windows API函数...

    DELPHI MessageBox自定义消息框图标〖源代码〗

    修改方法:在WINDOWS单元中找到此函数后,把BOOL改为Integer,共有三处要修改,然后在Delphi安装路径Lib中找到WINDOWS.DCU文件,把它改名或者删除,并把修改后的WINDOWS.PAS源码复制到Lib路径中。 ---- 该函数只有...

    hook api lib.zip

    2,当HookProc中使用UnInstallHookApi卸载完后就不能用第二个参数来调用API了(pfnXXXX()),切记! 2008.04.15 0.41 1,前面的deroko的LdeX86 有BUG,678b803412 会算错 换了一个LDX32,代码更少,更容易理解 2,...

    PE资源修复

    使用者须通过编程方式在自己的程序中 使用该引擎。该引擎特别适合进行软件汉化工作的朋友。 声明: 1.您可以免费使用该引擎,如果您发布了使用该引擎的程序,请在相关说明中注明该引擎的版 权信息,以表示支持作者...

    detour 2.1

    Detours是微软开发的一个函数库, 用于修改运行中的程序在内存中的影像,从而即使没有源代码也能改变程序的行为。具体用途是: 拦截WIN32 API调用,将其引导到自己的子程序,从而实现WIN32 API的定制。 为一个已在...

Global site tag (gtag.js) - Google Analytics