2009-06-08 3 views
1

SetFileInformationByHandleのMSDNドキュメントは、「Windows Server 2003およびWindows XPのFileExtd.lib」を参照しています。私はから「Win32のFILEIDのAPI 1.1」としてダウンロードすることが可能ですライブラリと.hファイルを、追跡するために管理: - どのようにすることができますDelphiからXP/2003のSetFileInformationByHandle?

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

実装は、静的.LIBファイル内にある表示されますこれはDelphiアプリケーションに参照/リンクされますか? Visual Studioで "C Dll"を作成して関数をエクスポートする唯一のオプションはありますか? .hファイルをDelphiのヘッダ定義に移植した人はいますか?

答えて

3

は、CおよびC++は、リンカがDLL関数に使用できる「スタブ」を提供するためのlibファイルを使用します。実際の関数の実装は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ヘッダーを置くと便利です(あなたの質問のダウンロードリンクはまったく役に立たないわけではありません)。

+2

SetFileInformationByHandleは()以降W2K3とXPでのみ利用可能ですので、あなたは、LoadLibrary関数を(使用する必要があります)とのGetProcAddress()実行時のための結合、代わりに結合コンパイル時のための「外部」のキーワードの、古いOSのバージョンをサポートする必要がある場合。 –

+0

Rob&Remy - ご返信いただきありがとうございますが、よろしいですか? XP/2003のKernel32.dllはSetFileInformationByHandleをエクスポートしないため、GetProcAddressはエラー127、 '指定されたプロシージャを見つけることができませんでした'で失敗します。だから私は実装が.libファイルにあると仮定した。おそらくkernel32.dllはそれを序数だけでエクスポートしますか? – tikinoa

+2

XP/2003では、SetFileInformationByHandle()はkernel32.dllにはまったく存在しないため、そのDLLからはインポートできません。あなたはそれがXP/2003のFileExtd.libの中に実装されているのは間違いありませんが、AFAIKはコンパイラとの互換性がないため、Delphiでそのlibを使用することはできません(静的リンク.libファイルはコンパイラ固有です)。 –

関連する問題