Sign in to follow this  
Hardguy

ExecuteString in Object?

Recommended Posts

Is it possible to call a method in an object by passing a string, like is done with ExecuteString in scripthelper.cpp?

I check the code and from what I can see it is not possible to extend to include object methods as that requires knowledge of the actual object pointer (which [url="http://www.angelcode.com/angelscript/sdk/docs/manual/classas_i_script_module.html#1258d7cfeed965f36ba312beeb49e81c"]CompileFunction[/url] does not).


So is this possible in some other way? And if so, how do I go about?


Reason for wanting this, is because it is a more secure way for script to call methods in other modules.

Share this post


Link to post
Share on other sites
While CompileFunction doesn't allow you to compile a class method you could quite easily write an automatic wrapper that takes the object pointer as one of the parameters, and then call the method. For example:


[code]
int CallObjectMethod(asIScriptObject *obj, const string &method)
{
string wrap = "void WrapCall(" + obj->GetObjectType()->GetName() + "@ obj) { obj." + method + "(); }";

asIScriptFunction *func = 0;
int r = execMod->CompileFunction("ExecuteString", wrap.c_str(), -1, 0, &func);
if( r < 0 )
return r;

asIScriptContext *execCtx = engine->CreateContext();
r = execCtx->Prepare(func->GetId());

if( r < 0 )
{
func->Release();

if( !ctx ) execCtx->Release();

return r;
}

execCtx->SetArgObject(0, obj);

// Execute the function
r = execCtx->Execute();

// Clean up
func->Release();
execCtx->Release();
}
[/code]

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this