Re: function pointer help!
- From: "Scott McPhillips [MVP]" <org-dot-mvps-at-scottmcp>
- Date: Wed, 14 Nov 2007 13:37:54 -0500
"Ron H." <rnh@xxxxxxx> wrote in message news:473b2e5f$0$7573$8d2e0cab@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
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]
.
- References:
- function pointer help!
- From: Ron H.
- Re: function pointer help!
- From: Ron H.
- function pointer help!
- Prev by Date: Re: Unicode Basic Latin and Latin-1 coverage of Western Europe
- Next by Date: Re: Unicode Basic Latin and Latin-1 coverage of Western Europe
- Previous by thread: Re: function pointer help!
- Next by thread: CRectTracker color
- Index(es):
Relevant Pages
|