WarCraft 3: Часть 2: Пишем что-то полезное

Добавление собственных Native функций
Теперь перед вами раскрываются достаточно широкие горизонты. Вот лишь несколько примеров:
  1. Быстрая конвертация строки типа "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);
}
  1. Динамически аллоцируемый массив

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 и личные опыты. Также полезным может оказаться вот эта ссылка

Просмотров: 2 584

Комментарии пока отсутcтвуют