Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "angelscriptAddOn/scriptbuilder/scriptbuilder.h"
- #include "stdio.h"
- #include <assert.h>
- #include <iostream>
- using namespace std;
- 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);
- }
- class Person {
- public:
- Person() {cout<<(int)this<<endl;this->counter = 1;}
- void printTwoInts(int a, int b) { cout << (int)this << " " << a << " " << b << endl; }
- void AddRef() {cout<<this<<" "<<this->counter;}
- void ReleaseRef() {cout<<this<<" "<<this->counter;}
- static Person *refFactory() {
- return new Person();
- };
- int counter;
- };
- int main() {
- asIScriptEngine *scriptEngine = asCreateScriptEngine(ANGELSCRIPT_VERSION);
- int r = scriptEngine->SetMessageCallback(asFUNCTION(MessageCallback_), 0, asCALL_CDECL);assert( r >= 0 );
- r = scriptEngine->RegisterObjectType("Person", sizeof(Person), asOBJ_REF); assert( r >= 0 );
- r = scriptEngine->RegisterObjectBehaviour("Person", asBEHAVE_FACTORY, "Person @f()", asFUNCTION(Person::refFactory), asCALL_CDECL); assert( r >= 0 );
- r = scriptEngine->RegisterObjectBehaviour("Person", asBEHAVE_ADDREF, "void f()", asMETHOD(Person, AddRef), asCALL_THISCALL); assert( r >= 0 );
- r = scriptEngine->RegisterObjectBehaviour("Person", asBEHAVE_RELEASE, "void f()", asMETHOD(Person, ReleaseRef), asCALL_THISCALL); assert( r >= 0 );
- r = scriptEngine->RegisterObjectMethod("Person", "void printTwoInts(int a, int b)", asMETHOD(Person, printTwoInts), asCALL_THISCALL);assert( r >= 0 );
- CScriptBuilder builder;
- r = builder.StartNewModule(scriptEngine, "Test"); assert( r >= 0 );
- r = builder.AddSectionFromMemory("void main() {\nPerson p;\np.printTwoInts(999,55);\n}"); assert( r >= 0 );
- r = builder.BuildModule();if( r < 0 ); assert( r >= 0 );
- asIScriptModule *mod = scriptEngine->GetModule("Test");
- asIScriptFunction *func = mod->GetFunctionByDecl("void main()");
- asIScriptContext *ctx = scriptEngine->CreateContext();
- ctx->Prepare(func);
- r = ctx->Execute();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement