2009-06-08 31 views
1

SetFileInformationByHandle的MSDN文檔引用「Windows Server 2003和Windows XP上的FileExtd.lib」。我設法追查庫和.h文件,它是可供下載的「的Win32 API的寫到FileID 1.1」來源:從Delphi的XP/2003中SetFileInformationByHandle?

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

看來實現是在靜態的.lib文件 - 如何能這被引用/鏈接到德爾福的應用程序?我唯一的選擇是在Visual Studio中創建「C Dll」並導出函數嗎?有誰將.h文件移植到Delphi頭文件定義中?

回答

3

C和C++使用lib文件提供鏈接器可用於DLL函數的「存根」。實際的函數實現在DLL中。 Delphi不使用lib文件;其external指令完成相同的事情。因此,您通常可以忽略MSDN中的「庫」要求。不過,「DLL」要求仍然有效。

如果它與德爾福的單位不包括你要的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頭部放在附近很方便(因此問題中的下載鏈接並非完全無用)。

+2

由於SetFileInformationByHandle()僅適用於W2K3和XP開始,你將不得不使用調用LoadLibrary()和GetProcAddress()的運行時綁定的,而不是爲編譯時綁定的「外部」的關鍵字,如果您需要支持較舊的操作系統版本。 – 2009-06-09 01:03:40