SetFileInformationByHandle в XP / 2003 от Delphi? - PullRequest
1 голос
/ 09 июня 2009

Документация MSDN для SetFileInformationByHandle ссылается на «FileExtd.lib в Windows Server 2003 и Windows XP». Мне удалось отследить библиотеку и файл .h, который можно загрузить как «Win32 FileID APIs 1.1» с:

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

Похоже, что реализация находится в статическом файле .lib - как на него можно сослаться / связать его с приложением Delphi? Является ли мой единственный вариант создания "C Dll" в Visual Studio и экспорта функций? И кто-нибудь портировал файл .h в определения заголовков Delphi?

1 Ответ

3 голосов
/ 09 июня 2009

C и C ++ используют файлы lib для предоставления «заглушки», которую компоновщик может использовать для функции DLL. Реальная реализация функции находится в DLL. Delphi не использует файлы lib; его директива external выполняет то же самое. Поэтому обычно вы можете игнорировать требование «библиотеки» в MSDN. Требование «DLL» все еще остается в силе.

Если модули, поставляемые с Delphi, не содержат нужной вам функции API, у вас есть несколько вариантов:

  • Найдите чужой код, который объявляет его для вас. Частым кандидатом являются единицы джедаев .

  • Объявите это сами.

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

    Я не знаю, объявлено ли уже TFileInfoByHandleClass; вам, возможно, придется объявить это тоже. MSDN включает в себя объявления функций, но иногда не хватает связанных перечислений и постоянных значений, поэтому удобно иметь поблизости заголовки Platform SDK (так что ссылка на скачивание в вашем вопросе не является абсолютно бесполезной).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...