This may be of help: http://www.myelin.co.nz/notes/callbacks/cpp-interface-callbacks.html Cheers, Frank On Dec 13, 2007 5:51 PM, Norman Franke <norman at myasd.com> wrote: > Here is what I do in C++ with PJSIP and it works just fine. I create a > class with a pjmedia_port as the first element. I then pass that as the > pjmedia_port. Then in the call back, I just cast the pjmedia_port to my > port class. I do this in a static function that is used for the callbacks. > The call backs can then do whatever they need to, or call a member function > using the this: > pj_status_t PlayPort::file_get_frame_get(pjmedia_port *this_port, > pjmedia_frame *frame) > { > PlayPort *port = (PlayPort *) this_port; > port->CallMemberFunction(); > } > > I've done similar things, including using a "user data field" (if > supported) for ages with many APIs. > > Norman Franke > ASD, Inc. > > > On Dec 12, 2007, at 12:23 PM, Klaus Darilion wrote: > > Hi Thiago! > > Thanks for this hint. I did it similar. I stored the pointer to my main > object in a global variable. Then, the registered C callback function > just calls the real callback (a member of my main object). > > Unfortunately sometimes my application crashes and I have no idea why :-( > > thanks > klaus > > > > tloginbr-pjsip at yahoo.com.br schrieb: > > I have one application in c++. My solution is not the > most pretty, but it works just fine. I have one file > called app_main.cpp that has all my callback functions > in plain C that I register with pjsua. When the call > comes in (on_incoming_call) I use > pjsua_call_set_user_data to save the pointer to the > object that I have my callback function (the real > one). All my callbacks that are inside app_main.cpp > only get the address of the object with > pjsua_call_get_user_data and then call the real > callback function from this object. Bellow is one > example for the callback that receives dtmf: > > static void on_dtmf_digit(pjsua_call_id call_id, int > digit ) > { > void *tpjcCallPtr; > tpjcCallPtr = pjsua_call_get_user_data(call_id); > ((TPJCall*)tpjcCallPtr)->ReceiveDTMF((char)digit); > } > > > My object that holds the code for the callback is of > type TPJCall that has a member function called > ReceiveDTMF. It doesn't even need to be static or > anything. > > Thiago > > Hi! > > I'm trying to add pjsip to a QT C++ application. > This gives me headaches > as I have no clue how to make callbacks in C++. > There are lots of > different approaches (static member function as > wrapper, templates ...). > > I tried the static member function wrapper with > logging callbacks but my > application crashes ~50%. > > I wonder if someone have practical tips for my how > to connect pjsip's > callbacks to member functions. > > thanks > klaus > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip at lists.pjsip.org > > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > > > Abra sua conta no Yahoo! Mail, o ?nico sem limite de espa?o para > armazenamento! > http://br.mail.yahoo.com/ > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip at lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip at lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > > > _______________________________________________ > Visit our blog: http://blog.pjsip.org > > pjsip mailing list > pjsip at lists.pjsip.org > http://lists.pjsip.org/mailman/listinfo/pjsip_lists.pjsip.org > > -------------- next part -------------- An HTML attachment was scrubbed... URL: http://lists.pjsip.org/pipermail/pjsip_lists.pjsip.org/attachments/20071213/694b35c4/attachment.html