[MODULE] GMXEXT_mod_xml
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: [MODULE] GMXEXT_mod_xml beta
Esta mal, antes que asignabas al parametro puntero ? o sea el parametro XMLElement *e como le asignabas un valor internamente en la funcion ?
-
brujoMX
- Posts: 321
- Joined: Thu Jan 12, 2012 9:10 pm
Re: [MODULE] GMXEXT_mod_xml beta
Antes era asi, cuando tenias que pasar como referencia un XMLElement desde Gemix.
pero ahora pues ya no seria que lo pase desde Gemix si no que la funcion se lo mande a gemix
En que estoy mal?
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);
}
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);
}
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: [MODULE] GMXEXT_mod_xml beta
Vale tienes que cambiar eso:
[Codebox=gemix file=Untitled.gemix]
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
[/Codebox]
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.
[Codebox=gemix file=Untitled.gemix]
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
[/Codebox]
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.
-
brujoMX
- Posts: 321
- Joined: Thu Jan 12, 2012 9:10 pm
Re: [MODULE] GMXEXT_mod_xml beta
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:
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.
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);
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: [MODULE] GMXEXT_mod_xml beta
De nada.
Mmmmm, si tienes un valor distinto de 0 no deberia entrar en el if, prueba a ponerle "== 0", pero es raro.
Mmmmm, si tienes un valor distinto de 0 no deberia entrar en el if, prueba a ponerle "== 0", pero es raro.
-
brujoMX
- Posts: 321
- Joined: Thu Jan 12, 2012 9:10 pm
Re: [MODULE] GMXEXT_mod_xml beta
Mira a eso me refiero, que estare haciendo mal ?


- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: [MODULE] GMXEXT_mod_xml beta
Nada por lo que veo, y te entra siempre en el if acabando la funcion ?
-
brujoMX
- Posts: 321
- Joined: Thu Jan 12, 2012 9:10 pm
Re: [MODULE] GMXEXT_mod_xml beta
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
- CicTec
- Posts: 16590
- Joined: Thu Jul 31, 2008 10:18 pm
Re: [MODULE] GMXEXT_mod_xml beta
Ah vale, porque te faltan las { } en el if, pon:
[Codebox=gemix file=Untitled.gemix]
if (GemixElement == NULL) {
GMXAPI_RetIntValue(SDK_RET_ERROR);
}
[/Codebox]
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.
[Codebox=gemix file=Untitled.gemix]
if (GemixElement == NULL) {
GMXAPI_RetIntValue(SDK_RET_ERROR);
}
[/Codebox]
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.
-
brujoMX
- Posts: 321
- Joined: Thu Jan 12, 2012 9:10 pm
Re: [MODULE] GMXEXT_mod_xml beta
ah si ya vi que esa macro tiene un return al final xD
gracias CicTec
gracias CicTec