- Code: Select all Expand view RUN
case SQL_CHAR: {
char *szResult = (char *) hb_xgrab(lLen + 1); //crea var string zero de un tamaño lLen
hb_xmemset(szResult, ' ', lLen); //rellena de espacios
szResult[lLen] = '\0'; //define fin de cadena
hb_itemPutCLPtr(pItem, szResult, lLen); //pone en puntero pItem la cadena creada, y algo mas???
hb_xfree(szResult);//kdsoft - no se si se debe liberar la memoria ocupada por szResult o si lo hizo hb_itemPutCLPtr
break;
Es necesario liberar la memoria con hb_xfree>
el codigo original no tiene esa linea de codigo, yo se la he puesto, pero tego duda, que hace realmente hb_itemPutCLPtr, entiendo que pone un valor en un puntero pItem, CLPtr, no se que significa (sera que tambien Clear the memory), hay una cuantas funciones con nombres similares, pero no tenog claro que hacen.
por ejemplo hay dos funciones similares hb_xmemset (esta es de harbour) y memset (esta es de c propiamente), seria interesante ir comprendiendo que haces estas funciones, aprender un poco el api moustroso de harbour.
gracias
- Code: Select all Expand view RUN
- extern HB_EXPORT PHB_ITEM hb_itemPutCLPtr ( PHB_ITEM pItem, char * szText, HB_SIZE nLen );
! hb_itemPutCPtr(), hb_itemPutCLPtr() fixed to put empty
string to item if szText is NULL and length is non-zero,
instead of trying to free NULL pointer causing internal
error.
* contrib/examples/rdddbt/dbfdbt1.c
* I did a mistake in 1999 by giving the name hb_itemPutCPtr()
to the function which would have to be correctly named
hb_itemPutCLPtr() (notice the 'L' for 'length').
se deduce, que hace hb_itemPutC -> pone un char string en item, L for Length y Ptr por pointer. (a la intentona)