首页 > 技术文章 > 动态库之间回调函数使用

huyupei 2018-01-16 20:23 原文

在底层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  的指针,将底层的回调函数的参数带出;

 

推荐阅读