Native функции: Часть 2: Пишем что-то полезное | |
Теперь перед вами раскрываются достаточно широкие горизонты. Вот лишь
несколько примеров:
- Быстрая конвертация строки типа "A001" в целое число и
обратно:
jInt jNATIVE String2RawCode(jString input)
{
const char *str = jStrGet(input);
if (strlen(str) == 1)
return str[0];
else if (strlen(str) == 4)
{
char newstr[4];
newstr[0] = str[3];
newstr[1] = str[2];
newstr[2] = str[1];
newstr[3] = str[0];
return *((jInt*)newstr);
}
return 0;
}
jString jNATIVE RawCode2String(jInt input)
{
char *str = (char*)&input;
char newstr[5];
if (input < 255)
{
newstr[0] = str[0];
newstr[1] = '\0';
}
else
{
newstr[0] = str[3];
newstr[1] = str[2];
newstr[2] = str[1];
newstr[3] = str[0];
newstr[4] = '\0';
}
return jStrMap(newstr);
}
- Динамически аллоцируемый массив
jInt jNATIVE ArrayAlloc(jInt len)
{
return (jInt)malloc(sizeof(jInt)*len);
}
jInt jNATIVE ArraySet(jInt array,jInt index,jInt val)
{
int *p = (int *)array;
p[index] = val;
return p[index];
}
jInt jNATIVE ArrayGet(jInt array, jInt index)
{
int *p = (int *) array;
return p[index];
}
jInt jNATIVE ArrayFree(jInt array)
{
int *p = (int *)array;
free(p);
return 0;
}
И так далее.
В дальнейшем поможет лишь анализ japi.dll и личные опыты.
|