windows - SetFileInformationByHandle i XP/2003 fra Delphi?

Indlæg af Hanne Mølgaard Plasc

Problem



MSDN-dokumentationen til SetFileInformationByHandle henviser til 'FileExtd.lib på Windows Server 2003 og Windows XP'. Det lykkedes mig at spore biblioteket og .h filen, som er tilgængelig til download som 'Win32 FileID APIs 1.1' fra:


http://www.microsoft.com/downloads/details.aspx?FamilyID=1DECC547-AB00-4963-A360-E4130EC079B8u0026amp;displaylang=en[4]


Det ser ud til, at implementeringen er i den statiske .lib-fil - hvordan kan det henvises til/linket til en Delphi-app? Er min eneste mulighed for at oprette en 'C Dll' i Visual Studio og eksportere funktionerne? Og har nogen ported .h filen til Delphi header definitioner?

Bedste reference


C og C ++ bruge lib-filer til at give den 'stub', som linkeren kan bruge til en DLL-funktion. Den faktiske funktion implementering er i DLL. Delphi bruger ikke lib-filer, dets external -direktiv udfører det samme. Derfor kan du normalt ignorere kravet om 'bibliotek' i MSDN. 'DLL' -kravet er dog stadig gyldigt.


Hvis enhederne, som følger med Delphi, ikke indeholder en API-funktion, du vil have, har du et par muligheder:



  • Find en andens kode, der erklærer det for dig. En hyppig kandidat er Jedi API-enhederne. [5]

  • Erklære det selv.


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


    Jeg ved ikke, om TFileInfoByHandleClass allerede er erklæret et sted, du kan også nødt til at erklære det også. MSDN indeholder funktions erklæringer, men mangler undertiden associerede enum og konstante værdier, så det er praktisk at have Platform SDK headers i nærheden (så downloadlinket i dit spørgsmål er ikke helt ubrugeligt).