如何使用AngelScript

2025-10-21 15:42:17

1、从官方下载SDK包,将SDK包解压后,可以看到有add_on,angelscript,docs,samples 4个文件夹。其中angelscript文件目录下projects目录下对应各类编译器的工程文件。选择对应的工程版本,直接打开即可正确编译。本文使用vs2017进行编译,在工程目录下没有,可以打开msvc2015工程升级为vc2017版本。

如何使用AngelScript

2、参考docs目录下的参考手册,我们可以很容易创建一个示例工程。

具体方法为:

 a.创建一个空工程,加入以下代码。

 b. 设置工程属性,包含sdk/angelscript/include和sdk/add_on目录,连接包含sdk/anglescript/lib目录。

 c.使用#pragma comment(lib,"angelscript.lib")或在链接属性中加入angelscriptd.lib/angelscript.lib)。

 d.将当前工程设置为MTD(Debug)/MT (Release)

#include <angelscript.h>

#include <scriptstdstring/scriptstdstring.h>

#include <scriptbuilder/scriptbuilder.h>

#include <cassert>

#include <iostream>

#include <string>

using namespace std;

#pragma comment(lib,"angelscriptd.lib")

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);

}

void print(string& str) {

cout << str << endl;  }

int main()

{

auto* engine = asCreateScriptEngine();

auto r = engine->SetMessageCallback(asFUNCTION(MessageCallback),0,asCALL_CDECL);

assert(r >= 0);

RegisterStdString(engine);

r = engine->RegisterGlobalFunction("void print(const string &in)", asFUNCTION(print), asCALL_CDECL); assert(r >= 0);

CScriptBuilder builder;

r = builder.StartNewModule(engine, "MyModule");assert(r >= 0);

r = builder.AddSectionFromFile("test.as");assert(r >= 0);

r = builder.BuildModule();assert(r >= 0);

auto* mod = engine->GetModule("MyModule");

auto* func = mod->GetFunctionByDecl("void main()");

assert(func != nullptr);

auto* ctx = engine->CreateContext();

ctx->Prepare(func);

r = ctx->Execute();

if (r != asEXECUTION_FINISHED){

if (r == asEXECUTION_EXCEPTION)

{

printf("An exception %s occurred,Please correct the code and try again.\n", ctx->GetExceptionFunction());

}  

}

ctx->Release();

engine->ShutDownAndRelease();

return 0;

}

如何使用AngelScript

3、示例代码是注册文件名为test.as 的脚本文件。可以在编译后exe所在目录下建立此文件。内容为:

 void main()

{

 print ( "Hello AngelScript !\n") ;

}

运行编译后的exe程序,即可看到控制台输出“Hello AngleScript!"。

如何使用AngelScript

4、原理解释:

 a. 脚本嵌入c++语言并使用的话,必须要先注册接口,接口包含函数,变量或类

 b. 使用AngelScript,最好还要定义个message callback,这个回调函数用于在调用build和执行脚本出错时,能够直观确认why。否则,调试脚本异常困难。

        c. 下一步就是加载编译脚本和执行脚本。目前加载编译脚本使用add_on目录中的script builder,使用CScriptBuilder,先调用StartNewModule构建一个module,再调用AddSectionFromFile加载脚本文件,然后BuidlModule,编译脚本。这3个函数都有返回值,在开发程序时一定要检验success后再进行下一步。

       d.使用编译的module,先使用GetModule,找到需要调用的函数GetFunctionByDecl,创建上下文createContext,然后Prepare,再执行脚本函数Execute

     e. 资源释放,释放上下文句柄,释放engine。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢