`
pascal4123
  • 浏览: 114625 次
  • 性别: 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;
分享到:
评论

相关推荐

    Delphi__调用API函数实现数据发送.rar

    1. **导入库**:在Delphi中,我们使用`uses`关键字导入包含API函数声明的单元,比如`Windows`或`Winsock`单元。 ```delphi uses Windows, Winsock; ``` 2. **声明API函数**:如果API函数没有在Delphi的标准库中...

    Delphi API 函数

    例如,字符串在API函数中通常使用`PChar`或`LPCTSTR`表示,而Delphi的`string`类型需要转换。 - **错误处理**:API函数的返回值通常包含错误信息。例如,`CreateFile`函数可能会返回一个`HANDLE`类型的无效句柄,...

    VB API 应用手册

    1. **声明API函数**:在VB中使用API函数之前,必须首先声明该函数。这涉及到指定函数名、返回类型、参数类型等信息,例如: ```vb Private Declare Function MessageBox Lib "user32" Alias "MessageBoxA" _ ...

    Delphi API HOOK完全说明

    在使用Delphi编写API Hook时,最重要的是确保自定义的函数与要改写的API函数具有相同的参数类型。例如,如果要拦截`MessageBoxA`和`MessageBoxW`这两个函数,则需按照以下方式定义自己的函数: ```pascal function ...

    api.rar_API

    通过`uses`语句引入相应的单元,就可以直接在代码中使用这些API函数。 为了更直观地学习和理解,"api.rar_API"中的示例可能包含以下几个关键部分: 1. 注册窗口类:定义一个结构(TWndClassEx),填充相关属性,并...

    Delphi格式的API帮助

    "Delphi格式的API帮助"指的是为Delphi开发者提供的关于如何在Delphi中使用各种API函数的文档和资源。 在Delphi中,使用API通常涉及到以下几个关键知识点: 1. **Pascal与C风格的API调用**:由于大多数Windows API...

    WinAPI-Wave相关函数

    ### WinAPI-Wave相关函数详解 #### 一、概述 在Windows API中,与音频处理相关的函数主要分为两大类:`WaveIn` 和 `WaveOut`。...掌握这些API函数对于开发涉及音频输入输出的应用程序具有重要意义。

    Delphi windows API

    2. **类型映射**:由于API函数通常定义为C语言的类型,所以在Delphi中需要进行类型映射,如将`PChar`映射为`LPSTR`,`HWND`映射为`THandle`等。 3. **异步调用**:某些API函数是异步的,如`CreateThread`,调用后...

    DelphiPOPUP_delphi_

    在本文中,我们将深入探讨如何在Delphi中使用POPUP功能,特别是通过API函数调用DLL文件来实现这一功能。首先,我们需要了解什么是API函数以及DLL文件。 API(Application Programming Interface)是操作系统或库...

    易语言汇编调用API命令源码-易语言

    1. **API声明**:在易语言中,我们需要先声明API函数,指定函数名、参数类型和返回值类型。例如,声明Windows API中的`CreateFile`函数,我们需要指定其函数原型,包括函数名、参数数量、参数类型以及返回值类型。 ...

    ftp文件传输api

    根据提供的文件信息,...通过这些API函数,开发者能够方便地实现FTP服务器上的文件管理任务,包括但不限于连接、断开连接、创建目录、上传文件和下载文件等操作。同时,通过异常处理机制确保了程序的健壮性和稳定性。

    用DLL的方式实现屏幕截图

    在IT行业中,动态链接库(DLL)是一种非常重要的技术,它允许多个应用程序共享同一段代码或数据,从而节省系统资源并提高效率。本篇将详细探讨如何使用DELPHI通过DLL来实现屏幕截图功能。 首先,DLL是Windows操作...

    Delphi环境中串口通信的实现.pdf

    本文详细介绍了在Delphi环境中实现串口通信的几种方法及其应用场景。通过对基础知识的梳理和具体实现细节的讲解,读者可以更好地理解串口通信的工作原理,并能够根据实际项目需求选择合适的实现方案。随着工业自动化...

    GetFileIcon.rar

    在`UGetFileIcon.pas`源码中,开发者通常会定义一个函数或方法,比如`GetFileIcon`,这个函数接受文件路径作为参数,然后调用`SHGetFileInfo`,最后返回图标信息。在`UGetFileIcon.dfm`中,可能有一个TImage组件用于...

    C#调用Delphi编写的非托管Dll的例子源程序

    综上所述,要实现C#调用Delphi编写的非托管DLL,你需要创建一个C#项目,使用`[DllImport]`特性声明Delphi DLL中的函数,正确设置参数类型,并处理好封送问题。在代码中进行适当的异常处理,确保程序的健壮性。最后,...

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

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

    易用条码标签打印软件二次开发调用

    2. **方法签名匹配**:在调用DLL函数前,我们需要在C#中定义对应的方法签名,包括参数类型、返回值类型等,确保与DLL中的函数一致。例如,可能有一个函数用于初始化打印对象,另一个用于设置标签模板。 3. **数据...

    delphi实现软件自动重启共2页.pdf.zip

    自动重启通常涉及到程序的自我调用或使用操作系统提供的API函数来终止当前进程并启动新的实例。在Delphi中,这可以通过几个步骤实现: 1. **捕获退出事件**:Delphi应用程序在运行时会触发各种事件,其中一个是`...

    注册表编程技术与应用实例

    本文详细介绍了注册表编程的基本概念和技术要点,包括API函数的使用方法以及在不同编程语言中的应用示例。通过学习本文提供的内容,开发者可以更好地掌握注册表编程技巧,从而有效地管理和配置应用程序。

    delphi调用vfw的几篇不错的资料

    要在Delphi中使用VFW,首先需要包含相关的头文件。虽然Delphi本身没有直接内置对VFW的支持,但可以通过导入Windows的头文件(如`windows.h`和`vfw.h`)来获得VFW的功能。在Delphi项目中,可以创建一个新的单元,然后...

Global site tag (gtag.js) - Google Analytics