文档章节

在 API 函数中使用 PChar 参数的几种方法

涂孟超
 涂孟超
发布于 2014/09/26 15:35
字数 208
阅读 7
收藏 0

//以 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;

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2010/04/26/1721350.html

共有 人打赏支持
涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
HOOK API DLL 注入

一、 序言对大多数的Windows开发者来说,如何在Win32系统中对API函数的调用进行拦截一直是项极富挑战性的课题,因为这将是对 你所掌握的计算机知识较为全面的考验,尤其是一些在如今使用RAD...

长平狐
2012/09/03
2.8K
0
用好Delphi中的字符串

用好Delphi中的字符串日期:2005年10月18日 作者: 人气:17184 查看:[大字体 中字体 小字体]一:各种字符串  字符串是Object Pascal所有数据类型中最有用的类型。许多函数以字符串为传递参...

vga
2016/08/09
14
0
Delphi防止同时出现多个应用程序实例--CreateMutex

 多实例指同时有同一个应用程序的多个副本在运行。同一个应用程序的多个副本可以相互独立地同时运行,是Win32操作系统提供的一个功能。但有时,我们可能希望用户启动应用程序后就不再启动它...

技术小胖子
2017/11/09
0
0
delphi pchar char byte string转换问题

delphi pchar char byte string转换问题 注:Delphi中的Char,PChar,PByte,Byte,String的相互转换,您是不是也遇到过,为此头疼过吗?你要是明白了他们的原理就会轻松了。 话题064840的标题是...

鹅倌
2017/01/06
0
0
vc++HOOK API黑客外挂编程必知必会

#include <windows.h> // 定义API挂接项结构 typedef struct HOOKITEM { DWORD dwAddr ; // IAT项所在地址 DWORD dwOldValue ; // IAT项的原始函数地址 DWORD dwNewValue ; // IAT项的新函数......

junwong
2012/03/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

记一次winserver2003系统,https无法访问,内存占用持续增加,解决办法

先交代一下环境: win server2003系统,系统装在hyper-v虚拟机里 大概2016年底的镜像,距离今天两年左右 病症:大概9月10号左右用这个镜像还可以访问https,但是今天用这个镜像新装的系统,就...

阳阳露
13分钟前
1
0
jdbc连接orcal数据库

import java.sql.Connection;  import java.sql.DriverManager;  import java.sql.ResultSet;  import java.sql.SQLException;  import java.sql.Statement;    ......

小橙子的曼曼
38分钟前
0
0
Vue学习资料

一直以为Vue是依赖nodejs的。 作为前端也可以耦合性就很低了。 //npm包管理器 进行管理npm install vue//初始化一个项目vue init//本地调试npm run dev//编译完成 ...

大灰狼wow
47分钟前
1
0
fullcalendar重新渲染

uiCalendarConfig.calendars.lesson_calendar.fullCalendar('removeEvents');var ym = uiCalendarConfig.calendars.lesson_calendar.fullCalendar('getView').title;$scope.get_lesson(y......

人来疯啊
51分钟前
1
0
多渠道打包总结

https://www.jianshu.com/p/2130db7584c8 https://blog.csdn.net/u011153817/article/details/50772496...

塔塔米
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部