macros are evil.. defining macros for engine functions is super duper super evil..

ps: for an on_ent_create function.. I'm not too sure if it will work, but you could get the last object in the linked-list ( see ENTITY struct, C_LINK next). If this object has one or more follower after a frame, these objects probably have been created (I'm pretty sure the engine always inserts elements at the end.. at least this would make sense and you could give it a try).
You could accomplish the same behaviour for on_ptr_remove.