I'm trying to register a variable parameter method like in this example: http://www.angelcode.com/angelscript/sdk/docs/manual/doc_adv_var_type.html
but in an object.
r = engine->RegisterObjectMethod("JGizmo", "void KeepInBounds( ?&in )",
asMETHOD( JGizmo, call),
asCALL_GENERIC); assert( r >= 0 );
but it fails to register with code: asWRONG_CALLING_CONV
with asCALL_THISCALL it just crashes when accessing the asIScriptGeneric object.
Is this possible at all for object methods?
asIScriptGeneric with object method possible?
Function pointers registered with asCALL_GENERIC must have the type void (*)(asIScriptGeneric *) this means that they cannot be member functions.
You're confusing the concepts ![:)](http://public.gamedev.net//public/style_emoticons/<#EMO_DIR#>/smile.png)
The asIScriptGeneric is used for the generic calling convention, which is for when native calling conventions are not supported
The variable type, ?&, is used to pass any argument type to a function, and yes they can be used with object methods too.
In your case the object method should be implemented like this:
Regards,
Andreas
![:)](http://public.gamedev.net//public/style_emoticons/<#EMO_DIR#>/smile.png)
The asIScriptGeneric is used for the generic calling convention, which is for when native calling conventions are not supported
The variable type, ?&, is used to pass any argument type to a function, and yes they can be used with object methods too.
In your case the object method should be implemented like this:
void JGizmo::KeepInBounds( void *ptr. int typeId )
{
// Determine the type of the argument with the typeId, and then cast the ptr accordingly with reinterpret_cast.
}
// Register it as
engine->RegisterObjectMethod("JGizmo", "void KeepInBounds(?&in)", asMETHOD(JGizmo, KeepInBounds), asCALL_THISCALL);
Regards,
Andreas
AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game
Thanks Andreas I suspected that worked. But I want to specifically use asIScriptGeneric* because this function will have variable number of parameters:
void KeepInBounds(?&in)
void KeepInBounds(?&in, ?&in)
void KeepInBounds(?&in, ?&in, ?&in)
etc.
void KeepInBounds(?&in)
void KeepInBounds(?&in, ?&in)
void KeepInBounds(?&in, ?&in, ?&in)
etc.
KAG DEVLOG: http://kagdev.tumblr.com/
Then the function must be implemented like this:
Regards,
Andreas
// Global function, or static class method
void MyGenericFunction(asIScriptGeneric *gen)
{
for( asUINT n = 0; n < gen->getArgCount(); n++ )
{
int type = gen->GetArgTypeId(n);
void *ptr = gen->GetAddressOfArg(n);
... reinterpret_cast the pointer according to its type
}
}
Regards,
Andreas
AngelCode.com - game development and more - Reference DB - game developer references
AngelScript - free scripting library - BMFont - free bitmap font generator - Tower - free puzzle game
Thanks this helped.
Still I would find it super useful to have generic parameters in objects like:
void CObject::MyGenericFunction(asIScriptGeneric *gen)
why can't that work? Any chance of it happening?
Still I would find it super useful to have generic parameters in objects like:
void CObject::MyGenericFunction(asIScriptGeneric *gen)
why can't that work? Any chance of it happening?
KAG DEVLOG: http://kagdev.tumblr.com/
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement