2010-12-08 24 views
4

Je me demandais pourquoi certaines fonctions ont des paramètres qui doivent être réglés sur NULL en raison de "paramètres réservés". Par exemple:Windows réservé aux paramètres 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 
); 

Je ne comprends pas pourquoi lpReserved existe? Je veux dire, si c'est réservé pourquoi le mettre, ne serait-il pas plus simple de l'omettre directement?

Merci! :) (ne faites pas attention à mon anglais s'il vous plaît ..)

Répondre

11

Je vois au moins deux raisons.

Un serait que ce paramètre est réservé pour une utilisation future et une éventuelle extension de fonctionnalité. S'assurer qu'il est réglé sur NULL pourrait garantir dans une certaine mesure qu'à l'avenir, lorsque la nouvelle fonctionnalité aura été ajoutée, les anciens programmes ne seront plus endommagés.

La deuxième raison possible serait que ce paramètre puisse être utilisé en interne dans le cadre de l'API privée et qu'une partie publique de l'API impose de définir ce paramètre sur NULL. Pourquoi ne pas l'omettre complètement? Il est beaucoup plus facile par la suite d'étendre les fonctionnalités du système sans changer l'interface. Il reste compatible binaire et source avec l'ancienne API et ne nécessite pas la reconstruction de l'ancien logiciel.

+0

Bon point. Merci. :) – BlackBear

+10

Il y a une autre raison que vous avez manquée: Lorsque l'API a été créée, le champ lpReserved a été utilisé pour autre chose, avec le temps le champ est devenu inutile ou indésirable. Au lieu de changer la signature de l'API (ce qui casserait tous les clients existants), le propriétaire de l'API a simplement choisi de rendre le champ «réservé». –

+0

@Larry: Merci, vous avez raison. Pour être précis cependant, je n'ai pas dit que ce sont ** toutes ** les raisons. Cela vous dérange-je d'ajouter ceci à la réponse? – detunized