Re: function pointer help!
"Ron H." <rnh@mmm.com> wrote in message
news:473b2e5f$0$7573$8d2e0cab@news.newsgroup-binaries.com...
I can't get this function pointer to work! Here's the scoop: I am using a
third party I/O board. The manufacturer supplied a lib and header file
with
the following typedef and cbEnableEvent function prototype:
typedef void (__stdcall *EVENTCALLBACK)(int, unsigned, unsigned, void*);
int EXTCCONV cbEnableEvent(int BoardNum, unsigned EventType, unsigned
Count,
EVENTCALLBACK CallbackFunc, void *UserData);
I created a function to deal with the callback:
//the return void and input prameters are defined in the manual...
void MyProjectView::CallHandler(int,unsigned int, unsigned int, void*)
{
}
So my challenge is to call cbEnableEvent with a pointer to CallHandler().
How about this?
EVENTCALLBACK pCallHandler;
pCallHandler = CallHandler;
The compiler complains with:
error C2440: '=' : cannot convert from 'void (__stdcall
CMyProjectView::* )(int,unsigned int,unsigned int,void *)' to
'EVENTCALLBACK'
There is no context in which this conversion is possible
Any help will be greatly appreciated!!!
You are attempting to use a C++ member function as the callback, but the
callback is defined in terms or C, not C++. You can declare your C++
function as static, or simply make it a nonmember function. The underlying
problem is that C++ functions receive a hidden parameter, the 'this'
pointer, so their signature is incompatible with C definitions.
Your static/global function will not be able to call other C++ member
functions, but the usual solution to that is to pass your 'this' pointer in
the void* UserData parameter. Then in your callback function you can cast
it back to an object pointer and call object functions with it.
--
Scott McPhillips [VC++ MVP]