动态库之间回调函数使用
在底层dll实现
接口.h文件
typedef interfaceBase* (lpObjCreate)();
class interfaceBase
{
virtual setcallback(callbackBase* callback){};
}
class callbackBase
{
virtual void callback(){};
}
.cpp文件
extern "C" __declspec(dllexport) interfaceBase* CreateObjCreate();
CLibMQTT* CreateObjCreate()
{
return interRealize ::Instance();
}
底层dll实现
class interRealize :public interfaceBase
{
//单例不多写
setcallback(callbackBase* callback){m_callback = callback;};
callbackBase* getcallback(){return m_callback;};
private:
callbackBase* m_callback;
static interRealize * m_instance;
}
上层dll实现
class callbackDeal : public callbackBase
{
void callback(){ int i = 0;};
}
main
{
HINSTANCE hDllUCLib = LoadLibrary(L".\\lib*.dll");
interfaceBase*pFunc = (interfaceBase*)GetProcAddress(hDllUCLib, "CreateObjCreate");
m_libMQTTBase = pFunc();
m_libMQTTBase ->setcallback(new callbackDeal );//如此callback就是实现callbackDeal 的方法;
//这样数据交互就从下层dll转移到上层dll中,MFC的话,在根据回调具体函数 发消息到主窗体;如此将下层代码和上层区分开
}
//该处只是简单描述;并没有贴代码;该功能将单例和多态结合使用,因此将该方法记录下来
//另外在底层dll实现class的 static函数(回调函数)中 可以使用 interRealize ::Instance()->getcallback();来获取上层callbackDeal 的指针,将底层的回调函数的参数带出;