Калбек спроектирован таким образом, что вызывается только в случае ошибок и предупреждений.
При желании сообщения об ошибках можно выводить методом движка WriteMessage.
// Простой каллбек void MessageCallback(const asSMessageInfo *msg, void *param) { const char *type = "ERR "; if( msg->type == asMSGTYPE_WARNING ) type = "WARN"; else if( msg->type == asMSGTYPE_INFORMATION ) type = "INFO"; printf("%s (%d, %d) : %s : %s\n", msg->section, msg->row, msg->col, type, msg->message); } // Устанавливаем калбек и создаем движок asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION); engine->SetMessageCallback(asFUNCTION(MessageCallback), 0, asCALL_CDECL);
// Создаем новый скриптовый модуль asIScriptModule *mod = engine->GetModule("module", asGM_ALWAYS_CREATE); // Загружаем и добавляем скриптовые секции в модуль string script; LoadScriptFile("script.as", script); mod->AddScriptSection("script.as", script.c_str()); // Собираем модуль int r = mod->Build(); if( r < 0 ) { // Сборка закончилась ошибкой }
AngelScript не имеет встроеных функций для загрузки файлов, так как большиство приложений имеют собственные методы для этого. Пример простого способа загрузить файл вручную:
// Загружаем файл в буффер void LoadScriptFile(const char *fileName, string &script) { // Открываем файл FILE *f = fopen("test.as", "rb"); // Вычисляем размер fseek(f, 0, SEEK_END); int len = ftell(f); fseek(f, 0, SEEK_SET); // Загружаем script.resize(len); fread(&script[0], len, 1, f); fclose(f); }
Хоть AngelScript сам и не загружает файлы, но в папке с аддонами вы можете найти Сборщик скриптов, который поможет загрузить и корректно обработать файлы со скриптами. Пример:
CScriptBuilder builder; int r = builder.BuildScriptFromFile(engine, "module", "script.as"); if( r < 0 ) { // Сборка закончилась ошибкой }