来自Delphi的XP / 2003中的SetFileInformationByHandle?

时间:2009-06-08 22:21:42

标签: windows delphi

SetFileInformationByHandle的MSDN文档引用“Windows Server 2003和Windows XP上的FileExtd.lib”。我设法跟踪库和.h文件,可从以下网站下载“Win32 FileID API 1.1”:

http://www.microsoft.com/downloads/details.aspx?FamilyID=1DECC547-AB00-4963-A360-E4130EC079B8&displaylang=en

看来实现是在静态.lib文件中 - 如何引用/链接到Delphi应用程序?我唯一的选择是在Visual Studio中创建“C Dll”并导出函数吗?有没有人将.h文件移植到Delphi头定义?

1 个答案:

答案 0 :(得分:3)

C和C ++使用lib文件提供链接器可用于DLL函数的“存根”。实际的函数实现在DLL中。 Delphi不使用lib文件;它的external指令完成了同样的事情。因此,您通常可以忽略MSDN中的“库”要求。但“DLL”要求仍然有效。

如果Delphi附带的单元不包含您想要的API函数,那么您有几个选择:

  • 找到为您声明的其他人的代码。常见的候选人是Jedi API units

  • 自己声明。

    interface
    function SetFileInformationByHandle(
      hFile: THandle;
      FileInformationClass: TFileInfoByHandleClass;
      lpFileInformation: Pointer;
      dwBufferSize: DWord
    ): Bool; stdcall;
    
    implementation
    function SetFileInformationByHandle; external 'kernel32';
    

    我不知道TFileInfoByHandleClass是否已在某处宣布过;你可能也需要申报。 MSDN包含函数声明,但有时缺少关联的枚举和常量值,因此在附近安装Platform SDK标题很方便(因此问题中的下载链接并非完全没用)。