Jump to content

  • Log In with Google      Sign In   
  • Create Account

- - - - -

Difficulty exposing operator << of object to angelscript


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
No replies to this topic

#1 greeniekin   Members   -  Reputation: 153

Like
0Likes
Like

Posted 15 July 2013 - 09:44 PM

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
 


Edited by greeniekin, 16 July 2013 - 06:35 AM.


Sponsor:



Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS