0

我正在编写一些基本代码来试验 Angelscript,但是我什至无法让最简单的功能正常工作。这是基本的代码块:

class Engine {
    public:
       void print(std::string&);
};

Engine::print(std::string &msg)
{
    cout<<msg.c_str()<<endl;
}

下面是为 Angelscript 初始化和注册 C 函数的实际代码:

int r;

asIScriptEngine *engine = asCreateScriptEngine(ANGELSCRIPT_VERSION);

r = engine->SetMessageCallback(asMETHOD(Engine,MessageCallback), this,asCALL_THISCALL);
assert( r >= 0 );

RegisterStdString(engine);

r = engine->RegisterObjectType("Engine", 0, asOBJ_APP_CLASS_CONSTRUCTOR);
cout<<"r was: "<<r<<endl;
assert( r >= 0 );

r = engine->RegisterObjectMethod("Engine","void print(const string &in)", asMETHOD(Engine,print), asCALL_THISCALL);
assert( r >= 0 );

起初我没有函数“RegisterObjectType()”,因此运行程序会抛出“'Engine' is not a valid type”错误,即使它是一个有效的类。所以我找到了一个名为“RegisterObjectType()”的函数并按照上面的方法实现了它,现在它在最后一个字段的“RegisterObjectType()”函数上抛出了一个“Invalid Flag”错误。我已经尝试了所有的类标志,它仍然抛出这个错误。

将类方法注册到 Angelscript 中的正确方法是什么?文档示例似乎不起作用。它似乎剪掉了除了它正在解释的实际功能之外的所有内容,例如,它没有提示使用类方法注册代码注册对象类型。或者不是很清楚。

我应该提到,遇到的所有错误都是 angelscript 库抛出的运行时错误,而不是编译器错误。

谢谢!

4

1 回答 1

0

as_OBJ_APP_CLASS_CONSTRUCTOR 不是正确的标志,它应该与其他 as_OBJ_APP... 标志结合使用。检查这个例如(有点过时),并说明注册对象类型的方法:http ://www.darawk.com/code/CoHClient/Angelscript/sdk/docs/articles/register_object.html 。

当然手册是你最好的朋友: http ://www.angelcode.com/angelscript/sdk/docs/manual/index.html(使用Angelscript->注册应用程序接口->注册对象类型)

于 2011-10-28T21:22:44.173 回答