Оглавление

ANSI C интерфейс

Путь: /sdk/add_on/clib/

Данное дополнение предоставляет интерефейс C, для приложений которые не понимают C++, но понимают C, например Delphi, Java..

Для использования AngelScript C, необходимо собрать исходники sdk/angelscript/source вместе с sdk/add-on/clib, и динамически слинковать их, а также подключить заголовочный файл angelscript_c.h, вместо angelscript.h. После этого мы сможете пользоваться библиотекой также, как и с C++.

Чтобы найти имя C-функции для вызова, используйте префиксы из таблицы:

interface prefix
asIScriptEngine asEngine_
asIScriptModule asModule_
asIScriptContext asContext_
asIScriptGeneric asGeneric_
asIScriptArray asArray_
asIScriptObject asObject_
asIObjectType asObjectType_
asIScriptFunction asScriptFunction_

Все методы принимают первым параметром указатель на интерфейс.

Пример:

#include 
#include 
#include "angelscript_c.h"

void MessageCallback(asSMessageInfo *msg, void *);
void PrintSomething();

int main(int argc, char **argv)
{
  int r = 0;

  // Создаем скриптовый движок
  asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
  r = asEngine_SetMessageCallback(engine, (asFUNCTION_t)MessageCallback, 0, asCALL_CDECL); assert( r >= 0 );
  r = asEngine_RegisterGlobalFunction(engine, "void print()", (asFUNCTION_t)PrintSomething, asCALL_CDECL); assert( r >= 0 );

  // Запускаем скрипт
  r = asEngine_ExecuteString(engine, 0, "print()", 0, 0);
  if( r != asEXECUTION_FINISHED )
  {
      printf("Чета не так!\n");
  }
  else
  {
      printf("Все в поряде!\n");
  }

  // Удаляем движок
  asEngine_Release(engine);
  
  return r;
}

void MessageCallback(asSMessageInfo *msg, void *)
{
  const char *msgType = 0;
  if( msg->type == 0 ) msgType = "Error  ";
  if( msg->type == 1 ) msgType = "Warning";
  if( msg->type == 2 ) msgType = "Info   ";

  printf("%s (%d, %d) : %s : %s\n", msg->section, msg->row, msg->col, msgType, msg->message);
}

void PrintSomething()
{
  printf("Called from the script\n");
}

Перевод - arroy.one@gmail.com. При копировании материалов указывайте ссылку на источник.