Q:使用回调函数来让动态库Lib获得运行程序App中的当前页方法?
A:具体思路
- 新建一个接口类Interface,声明一个纯虚函数getActivePage(QString & path)
- 让App中能够拿到当前页面的类A继承Interface,并去实现getActivePage函数.
- 在Lib动态库中,修改需要调那个函数的类B.在其中增加一个Interface*类型的成员变量m_pInterface,并实现它的setInterface函数. 并在调用处m_pInterface->getActivePage()。接着显式将类B导出来.
- 在类A的适当位置获取类B的对象,然后把类A的this指针set进去: B::GetInstance()->setInterface(this);
注意:
接口类的回调函数尽量简单(比如返回类型),一些复杂的操作可以放在实现层,比如用void callback()中去实现一些获取对象,操作对象,而不要把对象作为回调函数的返回值,导致不必要的麻烦