oudkaramla
Messages postés107Date d'inscriptionmardi 2 mars 2004StatutMembreDernière intervention 5 juillet 2004
-
24 juin 2004 à 12:16
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 2006
-
25 juin 2004 à 00:19
salut tout le monde,
j'ai un problem dans la définition d'une valeure d'un type enumeré et de lui affecter une valeure:
le ty enumeré est le suivant
typedef enum
{
KPDCDataTypeUnknown = 0, // This thing has no type!
KPDCDataTypeBool = 1, // type code for a bool
KPDCDataTypeInt32 = 2, // type code for a 32-bit integer
KPDCDataTypeString = 3, // type code for a string of 8-bit characters
// attrSize will be 0 or (strlen(s)+1)
KPDCDataTypeEnum = 4, // type code for an enum, represented in a 32-bit integer
KPDCDataTypeByteBlock = 5, // type code for a block of bytes.
KPDCDataTypeTime = 6, // type code for a time, seconds since Jan 1, 1970 or delta.
KPDCDataTypeGroupSeparator = 7, // type code for a group separator.
KPDCDataTypeInt32Array = 8, // type code for a 32-bit integer array
KPDCDataTypeInt16Array = 9, // type code for a 16-bit integer array
KPDCDataTypeFloat = 10, // type code for a floating point number
KPDCDataTypeInt8 = 11, // type code for an 8-bit integer
KPDCDataTypeUInt8 = 12, // type code for an unsigned 8-bit integer
KPDCDataTypeInt16 = 13, // type code for a 16-bit integer
KPDCDataTypeUInt16 = 14, // type code for an unsigned 16-bit integer
KPDCDataTypeUInt32 = 15, // type code for an unsigned 32-bit integer
KPDCDataType4CharCode = 16, // type code for a four character code (Mac OSType)
// - same as unsigned long.
KPDCDataTypeUInt16Array = 17, // type code for an unsigned 16-bit integer array
KPDCDataTypeRect = 18, // type code for KPDCRect ( four KPDCInt32 )
KPDCDataTypeFloatArray = 19, // type code for an array of float
KPDCDataTypes_end
} KPDCDataTypes;
moi par exemple je définir un variable valeure de type KPDCDataTypeEnum et de lui affecter la valeur 3 par exemple
comment faire merci
oudkaramla
Messages postés107Date d'inscriptionmardi 2 mars 2004StatutMembreDernière intervention 5 juillet 2004 24 juin 2004 à 13:37
JE T'explique j'ai à piloter une caméra. elle a une bibliothèque, moi je veux changer la valeure d'une propriété.
cette propriété peut prendre plusieures valeurs comme suit:
cameraexposuremode
R user enumerated (4 choises)
0=M
1=A
2=s
3=p
le changement de la propriété se fait par l'intermediaire d'une fonction de la librairie:
////////////////////////////////////////////////////////////////////////////////
//
// Function: KPDCSetAttributeValue
//
// Description:
// Set the value of the specified attribute ID
//
// Parameters:
// In: inRef - a reference to an object that has the attribute.
// inAttrID - the ID of an attribute of the object referred to by inRef.
// inType - The type of the attribute.
// inAttrSize - The size of the provided value buffer.
// inAttrValue - The address of the attribute value.
// Returns: Any of the tool kit errors, KPDC_InvalidAttrIDErr
////////////////////////////////////////////////////////////////////////////////
KPDCENTRY KPDCStatus KPDCSetAttributeValue( KPDCOpaqueRef inRef,
KPDCAttributeID inAttrID,
KPDCDataType inType,
KPDCUInt32 inAttrSize,
void* inAttrValue);
le problem qui se pose c'est comment dire à la caméra de prendre la valeur 3 (=p) par exemple tout en spécifiant que le type de inAttrValue est "KPDCDataTypeEnum = 4, " et qu'on lui affecte la valeur "3 ou P"?
MERCI
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 25 juin 2004 à 00:00
j'ai pas trop pigé ce que tu souhaite faire mais voici un truc sur les enum :
quand tu déclare un type enuméré comme KPDCDataTypes, i ls'agit simplement d'un type entier dont les valeurs possibles appartiennent à un ensemble défini (celle de l'énumération).
les valeurs de l'énumération sont ainsi des constantes entières qui ne peuvent être affectées qu'a des variables du type de l'énumération. Ce principe permet au compilateur de vérifier que certaine varaibles ont toujours des valeurs "correctes".
en fait, tu pourrais très bien définir des constante avec des #define et les affectées ou les passer en paramètres aux fct mais dans ce cas, il n'y a pas de vérif de type de la part du compilo.
en fait je vient de relire ta question et "KPDCDataTypeEnum" n'est pas un type mais une valeur constante égale à 4. Toutes les valeurs de l'énumération aurait très bien pu être définies avec des #define
Vous n’avez pas trouvé la réponse que vous recherchez ?
ymca2003
Messages postés2070Date d'inscriptionmardi 22 avril 2003StatutMembreDernière intervention 3 juillet 20067 25 juin 2004 à 00:19
je crois que j'ai compris ton pb. En fait la fct de paramètrage permet de donner des paramètres ayant plusieur type (int, string...). le paramètre inType permet de spécifié ce type parmis une énumération de type possible.
parmis ces types possibles, il y a un qui s'appelle KPDCDataTypeEnum qui indique que le paramètres supplémentaires sera un entier 32 bits (qui pourra faire partie d'une autre énumération et apparemment 0, 1, 2 ou 3)
donc il te faut définir une nouvelle enum:
typedef enum
{
EMyEnum_M = 0,
EMyEnum_a = 1,
EMyEnum_s = 2,
EMyEnum_p = 3,
}MyEnum;
et appeler la fct avec :
KPDCDataType inType = KPDCDataTypeEnum;
int value = EMyEnum_p;
KPDCSetAttributeValue(inRef, inAttrId, inType, sizeof(value), &value);