Angelscript类方法注册

时间:2011-08-08 10:07:30

标签: c++ function scripting registering

我正在编写一些基本代码来试验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'不是有效类型”错误,即使它是一个有效的类。所以我找到了一个名为“RegisterObjectType()”的函数并按上面的方式实现它,现在它在最后一个字段的'RegisterObjectType()'函数中抛出了“Invalid Flag”错误。我已经尝试了所有类标志,它仍然会抛出此错误。

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

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

谢谢!

1 个答案:

答案 0 :(得分: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-&gt;注册应用程序界面 - &gt;注册对象类型)

相关问题