I’m aware that the windows “directshow” headers have both C++ class definitions, as well as their “C” struct equivalents.
My question is, if I call into a C++ method (from C–ffmpeg in this case) and it returns me a class, how can I determine if the object passed to me passes the “is a” test for various interfaces? How can I cast it to its various interface methods? If that makes sense. (all from in straight C).
The example in question is, given ffmpeg’s dshow layer: https://github.com/FFmpeg/FFmpeg/tree/master/libavdevice I have access to IPin’s, now I want to cast them to IAMBufferNegotiation (if they implement that interface) like in this example: http://sid6581.wordpress.com/2006/10/09/minimizing-audio-capture-latency-in-directshow/
Thanks!
Basically, I wouldn’t. What I’d do is write an adapter layer in C++ that provides a C friendly interface to the C++ framework.
If you are dealing with COM objects, then you can use QueryInterface http://www.codeproject.com/Articles/13601/COM-in-plain-C