现在我建了3个dll工程,生成三个dll:ProgressBar.dll、Base.dll和UI.dll,3个dll均为MFC扩展dll。ProgressBar.dll导出一个CProgressBar类,在Base.dll和UI.dll都要使用这个类,UI.dll同时又使用了Base.dll导出的API函数。现在在exe中加载UI.dll失败,我怀疑是不是因为Base.dll和UI.dll同时使用CProgressBar类,而UI.dll又使用Base.dll导出的API函数所致,因为我让Base.dll不使用CProgressBar类,exe程序就可以成功动态加载UI.dll了。 编译环境为VS 2005, Win XP sp2。
现在我建了3个dll工程,生成三个dll:ProgressBar.dll、Base.dll和UI.dll,3个dll均为MFC扩展dll。ProgressBar.dll导出一个CProgressBar类,在Base.dll和UI.dll都要使用这个类,UI.dll同时又使用了Base.dll导出的API函数。现在在exe中加载UI.dll失败,我怀疑是不是因为Base.dll和UI.dll同时使用CProgressBar类,而UI.dll又使用Base.dll导出的API函数所致,因为我让Base.dll不使用CProgressBar类,exe程序就可以成功动态加载UI.dll了。 编译环境为VS 2005, Win XP sp2。
第二不建议这样使用模块,模块的耦合度太高总是软件工程应该努力避免的,如果真的需要引用这么多类,还是做到一个dll中去
大虾,能否详细解释一下第一条,怎么理解毕竟是编译器自己的实现,不怎么通用?按照我的理解是,这个类还要依赖于MFC库,移植性比较差,是这样理解吗?
先编译ProgressBar.dll;再编译Base.dll;最后编译UI.dll。