最近写了个项目,里面遇到了一个函数跨模块回调的问题,由于项目本身比较复杂,所以简化了一下,但是还是能反映问题的。
问题大致是这样:
我从主程序(exe)中调用一个DLL(称为D)中的类,这个类又调用另一个DLL(称为B)中的类,在每一级的调用之前都已经传入了一个函数指针, 在B执行完之后通过回调返回到上一个DLL(D),然后再通过回调最后返回到主程序。但是在从B返回到D之后,D的数据好像变了,导致D最终无法返回主程序。
更具体一点:
D是依赖于B的,而主程序对B和D都依赖。
回调我是通过类的成员函数指针:
typedef void(Object::*CallBack)(...);
通过一个结构体来保存函数指针和该函数所属的对象。
typedef struct
{
Object* object;
CallBack method;
} EventHandler;
代码片段在这里:
https://code.csdn.net/snippets/693435
项目地址:
https://code.csdn.net/jomoonrain2/c-lab
我觉得最有问题是我定义的这个函数指针。
但是问题是如果我没有跨DLL的话,貌似这样是没问题的。我知道跨模块调用应该挺复杂,虽然可以想其他的办法,但是这个问题如果搞不明白,吃饭都不香。。。
希望各路高手不嫌弃我这仅有的60币,不吝赐教。