Advertisement

Difficulty exposing operator << of object to angelscript

Started by July 16, 2013 03:44 AM
-1 comments, last by greeniekin 11 years, 4 months ago

SOLVED. No need to read

I have Packet class which I use and I would like to expose it to angelscript.
It overloads >> and << for a couple different types like bools, int's, floats.

This class is defined like this.


class Packet
{
public :
    Packet& operator <<(Int32               data);
}

I have tried overloading just for the method above as a test. With the following code.


r = engine->RegisterObjectMethod("Packet", "Packet opShl(int data)", asMETHODPR(Packet, operator<<,(Int32),Packet&), asCALL_THISCALL); assert( r >= 0 );

which with the code below causes a crash and printing out the integer value passed into the method is different to the 55 sent in


Packet packet;
int intVal = 55;
packet << intVal ;

Now that I am writing this I think it is because i tried to set this up as a angelscript value type. Because packet is actually from the sfml library and I do not really want to be adding reference counting to that class and I was happy with a copy being made when used in scripts. Here is the setup of the type. Though I still can not understand why the function call can output text and print out the passed in integer except incorrectly. I thought that would be the only thing that works and the invalid pointer for the packet or what ever would be the only issue(and probably is the reason it does crash).


	// Register the packet type
	r = engine->RegisterObjectType("Packet", sizeof(Packet), asOBJ_VALUE | asOBJ_APP_CLASS_CDK); assert( r >= 0 );

	// Register the object constructor and destructor
	r = engine->RegisterObjectBehaviour("Packet", asBEHAVE_CONSTRUCT,  "void f()",                    asFUNCTION(ConstructPacket), asCALL_CDECL_OBJLAST); assert( r >= 0 );
	r = engine->RegisterObjectBehaviour("Packet", asBEHAVE_CONSTRUCT,  "void f(const Packet &in)",    asFUNCTION(CopyConstructPacket), asCALL_CDECL_OBJLAST); assert( r >= 0 );
	r = engine->RegisterObjectBehaviour("Packet", asBEHAVE_DESTRUCT,   "void f()",  

Anyway I am really tired and have a huge headache. I am currently all out of ideas and need to sleep.

Any ideas or help is much appreciated.

Edit:
So I have had a big sleep and tried a few things and I managed to figure it out. I feel really stupid about this

i had "Packet opShl(int data)" instead of "Packet &opShl(int data)"

Now the thing is I had tried that and still got errors before. Though I clearly must had had added another error somewhere else at the same time. ><

Anyway it is all fixed now. Sorry for the waste of your time

This topic is closed to new replies.

Advertisement