は、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ヘッダーを置くと便利です(あなたの質問のダウンロードリンクはまったく役に立たないわけではありません)。
SetFileInformationByHandleは()以降W2K3とXPでのみ利用可能ですので、あなたは、LoadLibrary関数を(使用する必要があります)とのGetProcAddress()実行時のための結合、代わりに結合コンパイル時のための「外部」のキーワードの、古いOSのバージョンをサポートする必要がある場合。 –
Rob&Remy - ご返信いただきありがとうございますが、よろしいですか? XP/2003のKernel32.dllはSetFileInformationByHandleをエクスポートしないため、GetProcAddressはエラー127、 '指定されたプロシージャを見つけることができませんでした'で失敗します。だから私は実装が.libファイルにあると仮定した。おそらくkernel32.dllはそれを序数だけでエクスポートしますか? – tikinoa
XP/2003では、SetFileInformationByHandle()はkernel32.dllにはまったく存在しないため、そのDLLからはインポートできません。あなたはそれがXP/2003のFileExtd.libの中に実装されているのは間違いありませんが、AFAIKはコンパイラとの互換性がないため、Delphiでそのlibを使用することはできません(静的リンク.libファイルはコンパイラ固有です)。 –