一般的情形下C++类中的回调函数都被声明为静态类型的函数,而且函数参数固定不能改写,类中的静态函数的难题在于如何在静态函数(回调函数)里获取成员变量的值。此前因为项目需要在回调中获取该类型的数据,纠结半天,参考网上;得出一些方法:
可以这样来做,例子:
typedef int(LPADDR)(const char); //函数指针 class A { public: A() { pAThis = this; //在构造函数中获取实例指针 hinst = ::LoadLibrary("XXX.dll"); lprLoc = (LPADDR)::GetProcAddress(hinst,"xxxx"); } LPADDR lprLoc; HINSTANCE hinst; static A* pAThis; //静态指针 static void Test() //静态函数,类似回调 { LPADDR loc = pAThis->lprLoc; //在此处可以获取到成员变量的值 if(-1 != loc("E:\xxxx\w1.jpg")) { printf("Success!"); } } }; A* A::pAThis = NULL; //静态成员初始化
这只是一个方法,可能还有更好的方法。