Autor Tema: Estructuras y punteros en librerías gráficas de microchip  (Leído 1197 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ALFREDOSKY

  • PIC16
  • ***
  • Mensajes: 118
Estructuras y punteros en librerías gráficas de microchip
« en: 09 de Julio de 2014, 14:04:55 »
Hola a todos, estoy aprendiendo c,c++,pic32 y las librerías gráficas de microchip. Estoy tratando de entender la lógica del funcionamiento y creo que voy lento pero seguro...dentro de esta lectura y aprendizaje me encuentro con una estructura de la librería GOL.h

Código: [Seleccionar]
typedef struct
{
    WORD                ID;                              // Unique id assigned for referencing.
    void                *pNxtObj;                        // A pointer to the next object.
    GOL_OBJ_TYPE        type;                            // Identifies the type of GOL object.
    WORD                state;                          // State of object.
    SHORT               left;                            // Left position of the Object.
    SHORT               top;                            // Top position of the Object.
    SHORT               right;                          // Right position of the Object.
    SHORT               bottom;                          // Bottom position of the Object.
    GOL_SCHEME          *pGolScheme;                    // Pointer to the scheme used.
    DRAW_FUNC           DrawObj;                        // function pointer to the object draw function
    FREE_FUNC           FreeObj;                        // function pointer to the object free function
    MSG_FUNC            MsgObj;                          // function pointer to the object message function
    MSG_DEFAULT_FUNC    MsgDefaultObj;                  // function pointer to the object default message function
} OBJ_HEADER;

y luego en una función ubicada en proccesing.c encuentro:

Código: [Seleccionar]
static void proccesing(void)
{OBJ_HEADER *pHdr;
....
....
SetState(pHdr, CB_CHECKED);

y la definición del esta ultima función la encuentro en GOL.h

Código: [Seleccionar]
#define SetState(pObj, stateBits)   ((OBJ_HEADER *)pObj)->state |= (stateBits)
y la definición de CB_CHECKED la encuentro en CheckBox.h

Código: [Seleccionar]
#define CB_CHECKED      0x0004  // Checked state
la función SetState(pObj, stateBits) no lo entiendo bien...lo que puedo decir es que pObj es un puntero que apunta a la dirección de la estructura OBJ_HEADER, y state es uno de los miembros de aquella estructura; luego, me parece que hay una operación lógica(or) entre el estado anterior de 'state' y 'stateBits' y se almacena en 'state', no estoy seguro si sea asi ni como se realiza la operación  :? ...en realidad todo esto seria mi PRIMERA pregunta.

La SEGUNDA pregunta esta relacionado con la programación, para EMULAR lo que se esta intentando realizar con estas declaraciones, he creado una estructura y he intentado manipular los datos de sus miembros, todo esto lo he hecho con DEV C++ y queda así:

Código: [Seleccionar]
#include <iostream>
#include <cstdlib>

using namespace std;

typedef struct
{
        int pago_bruto;
        int pago_pendiente;
        int pago_realizado;
}
pago;       

int main()
{
    pago*ptr = NULL;                    //inicialización de puntero
    ((pago*)ptr)->pago_realizado = 40;//asignación de datos a miembro de estructura con punteros
       
    cout<<"DATOS DE EMPLEADO"<<endl;
    cout<<"*****************"<<endl;
    cout<<endl;
   
    system("PAUSE");
    return EXIT_SUCCESS;
}
 

pero obtengo error 'An access violation(segmentation fault) raised in your program'...y me señala la line ((pago*)ptr)->pago_realizado = 40; aparentemente esta implementación es idéntica a  ((OBJ_HEADER *)pObj)->state |= (stateBits)  a excepcion que no realizo operacion logica, sino que asigno un dato al miembro de la estructura...por favor si alguien me puede ayudar a resolver y/o aclarar estos problemas se lo agradecería infinitamente y contribuiría con mi alicaído conocimiento de c  :lol:

Desconectado ALFREDOSKY

  • PIC16
  • ***
  • Mensajes: 118
Re: Estructuras y punteros en librerías gráficas de microchip
« Respuesta #1 en: 09 de Julio de 2014, 14:13:40 »
la enumeración GOL_OBJ_TYPE la encuentro en GOL.h

typedef enum
{
    OBJ_BUTTON,                    // Type defined for Button Object.
    OBJ_WINDOW,                    // Type defined for Window Object.
    OBJ_CHECKBOX,                  // Type defined for Check Box Object.
    OBJ_RADIOBUTTON,               // Type defined for Radio Button Object.
    OBJ_EDITBOX,                   // Type defined for Edit Box Object.
    OBJ_LISTBOX,                   // Type defined for List Box Object.
    OBJ_SLIDER,                    // Type defined for Slider and/or Scroll Bar Object.
    OBJ_PROGRESSBAR,               // Type defined for Progress Object.
    OBJ_STATICTEXT,                // Type defined for Static Text Object.
    OBJ_PICTURE,                   // Type defined for Picture or Bitmap Object.
    OBJ_GROUPBOX,                  // Type defined for Group Box Object.
    OBJ_CUSTOM,                    // Type defined for Custom Object.
    OBJ_ROUNDDIAL,                 // Type defined for Dial Object.
    OBJ_METER,                     // Type defined for Meter Object.
    OBJ_GRID,                      // Type defined for Grid Object.
    OBJ_CHART,                     // Type defined for Chart Object.
    OBJ_TEXTENTRY,                 // Type defined for Text-Entry Object.
    OBJ_DIGITALMETER,              // Type defined for DIGITALMETER Object.
    OBJ_ANALOGCLOCK,                // Type defined for ANALOGCLOCK Object.
    OBJ_UNKNOWN                    // Type is undefined and not supported by the library.
} GOL_OBJ_TYPE;

y esta seria una TERCERA pregunta, como es que se relaciona enum con struct?


 

anything