2010-12-08 10 views
4

いくつかの機能があるため、「予約されたパラメータ」のNULLに設定する必要がありますいくつかのパラメータを持っている理由私は思っていました。例:のWindows APIの予約パラメータ

LONG WINAPI RegQueryValueEx(
    __in   HKEY hKey, 
    __in_opt  LPCTSTR lpValueName, 
    __reserved LPDWORD lpReserved, 
    __out_opt LPDWORD lpType, 
    __out_opt LPBYTE lpData, 
    __inout_opt LPDWORD lpcbData 
); 

なぜlpReservedが存在するのか理解できません。つまり、なぜそれを置くのが予約されていれば、それを直接省略する方が簡単ではないでしょうか?

ありがとうございます! :)私は、少なくとも2つの理由を参照してください

答えて

11

(..私の英語に全く注意をしてください払っていません)。

一つは、このパラメータは将来の使用と可能な機能拡張のために予約されていることだろう。 NULLに設定されていることを確認することで、将来、新しい機能が追加されたときに古いプログラムが破損することがある程度保証されます。

第2の理由は、このパラメータを実際にプライベートAPIの一部として内部的に使用することができ、APIの公開部分がこのパラメータをNULLに設定することです。

なぜそれを完全に省略しませんか?後でインターフェースを変更することなくシステムの機能を拡張する方がずっと簡単です。古いAPIと互換性のあるバイナリおよびソースコードのままであり、古いソフトウェアを再構築する必要はありません。

+0

良い点。ありがとう。 :) – BlackBear

+10

あなたが逃したもう一つの理由があります:APIが作成されたときに、lpReservedフィールドが何か他のものに使用されました。 API署名(既存のすべてのクライアントを破る)を変更する代わりに、API所有者は単にフィールドを '予約済み'にすることを選択しました。 –

+0

@Larry:ありがとうございます。正確に言えば、私はこれらがすべて**理由であるとは言いませんでした。これを答えに加えてもいいですか? – detunized

関連する問題