通常的情形下C++類中的回調函數都被聲明爲靜態類型的函數,並且函數參數固定不能改寫,類中的靜態函數的難題在於如何在靜態函數(回調函數)裏獲取成員變量的值。此前由於項目須要在回調中獲取該類型的數據,糾結半天,參考網上;得出一些方法:
能夠這樣來作,例子:函數
<!-- lang: cpp -->
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; //靜態成員初始化this
這只是一個方法,可能還有更好的方法。指針