Page 3 of 5

Re: [MODULE] GMXEXT_mod_xml beta

PostPosted: Tue Aug 27, 2013 9:34 pm
by CicTec
Esta mal, antes que asignabas al parametro puntero ? o sea el parametro XMLElement *e como le asignabas un valor internamente en la funcion ?

Re: [MODULE] GMXEXT_mod_xml beta

PostPosted: Tue Aug 27, 2013 9:44 pm
by brujoMX
Antes era asi, cuando tenias que pasar como referencia un XMLElement desde Gemix.

Code: Select all
MXvoid GMXEXT_XmlGetRootElement() {
   SDK_XMLElement *dst = (SDK_XMLElement *)GMXAPI_GetIntPtrParam();
   SDK_GetDocument();

   if (doc != NULL) {
      XMLElement *src = doc->RootElement();
      if (src != NULL) {
         SDK_FillElement(XMLDocumentID, dst, src);
         GMXAPI_RetIntValue(SDK_RET_SUCCESS);
      }
   }

   GMXAPI_RetIntValue(SDK_RET_ERROR);
}


pero ahora pues ya no seria que lo pase desde Gemix si no que la funcion se lo mande a gemix

Code: Select all
GMXvoid GMXEXT_XmlGetRootElement() {
   SDK_GetDocument();
   SDK_XMLElement *root = (SDK_XMLElement *)malloc(sizeof(SDK_XMLElement));
   
   if (doc != NULL) {
      XMLElement *src = doc->RootElement();
      if (src != NULL) {
         SDK_FillElement(XMLDocumentID, root, src);
         GMXAPI_RetIntValue(int(root));
      }
   }

   GMXAPI_RetIntValue(SDK_RET_ERROR);
}


En que estoy mal?

Re: [MODULE] GMXEXT_mod_xml beta

PostPosted: Tue Aug 27, 2013 9:50 pm
by CicTec
Vale tienes que cambiar eso:
Source Code (Gemix) [ Download ] [ Hide ]
  •          GMXAPI_RetIntValue((GMXint)root); // asi stransformo el valor del puntero en un INT y lo devuelvo
  •       }
  •    }
  •  
  •    GMXAPI_RetIntValue(0); // devuelvo 0 para que el puntero que recibe el valor sea NULL
  •  

En el medio falta que te crees un pool (lista enlanzada o lo que sea) que guarde la lista de los "root" alocados, cuando la lib acaba, el entrypoint "release" debe recorrer la lista y hacer un free para liberar la memoria.

Re: [MODULE] GMXEXT_mod_xml beta

PostPosted: Tue Aug 27, 2013 10:10 pm
by brujoMX
Gracias, si eso voy a hacer lo de la pool y al finalizar liberar todo,
disculpa pero tengo otra duda, como comparo contra NULL un puntero que viene desde Gemix a mi dll
por ejemplo:

Code: Select all
SDK_XMLElement *GemixElement = (SDK_XMLElement *)GMXAPI_GetStructPtrParam();         
   if (GemixElement == NULL)                                             
      GMXAPI_RetIntValue(SDK_RET_ERROR);   


en ese fragmento de codigo SIEMPRE entra al if por lo tanto la funcion termina, mas no se por que razon, si GemixElement no es nulo, pues lo estoy siguiendo con el depurador de visual studio y si tiene datos y todo.

Re: [MODULE] GMXEXT_mod_xml beta

PostPosted: Tue Aug 27, 2013 10:17 pm
by CicTec
De nada.

Mmmmm, si tienes un valor distinto de 0 no deberia entrar en el if, prueba a ponerle "== 0", pero es raro.

Re: [MODULE] GMXEXT_mod_xml beta

PostPosted: Tue Aug 27, 2013 10:26 pm
by brujoMX
Mira a eso me refiero, que estare haciendo mal ?

Image

Re: [MODULE] GMXEXT_mod_xml beta

PostPosted: Tue Aug 27, 2013 10:35 pm
by CicTec
Nada por lo que veo, y te entra siempre en el if acabando la funcion ?

Re: [MODULE] GMXEXT_mod_xml beta

PostPosted: Tue Aug 27, 2013 10:43 pm
by brujoMX
si, siempre siempre, si yo comento el if entonces la funcion continua y hace su trabajo sin problemas, pero si dejo el if entonces siempre me dice que es NULL

Re: [MODULE] GMXEXT_mod_xml beta

PostPosted: Tue Aug 27, 2013 10:49 pm
by CicTec
Ah vale, porque te faltan las { } en el if, pon:
Source Code (Gemix) [ Download ] [ Hide ]
  •    if (GemixElement == NULL)  {                                          
  •       GMXAPI_RetIntValue(SDK_RET_ERROR);
  •    }
  •  

Porque la macro de Gemix tiene 2 istrucciones, una llamada al RetValue y un return, si no pones las { }, el if ejecutara solo el RetInt value y el return queda fuera dal IF, ejecutandose siempre y acabando asi la funcion.

Re: [MODULE] GMXEXT_mod_xml beta

PostPosted: Tue Aug 27, 2013 10:55 pm
by brujoMX
ah si ya vi que esa macro tiene un return al final xD

gracias CicTec