Данное дополнение предоставляет интерефейс 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"); }