现在我建了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。

解决方案 »

  1.   

    第一不建议用扩展dll导出类,毕竟是编译器自己的实现,不怎么通用
    第二不建议这样使用模块,模块的耦合度太高总是软件工程应该努力避免的,如果真的需要引用这么多类,还是做到一个dll中去
      

  2.   


        大虾,能否详细解释一下第一条,怎么理解毕竟是编译器自己的实现,不怎么通用?按照我的理解是,这个类还要依赖于MFC库,移植性比较差,是这样理解吗?
      

  3.   

    应该可以运行成功的。你要注意设定依赖关系和编译顺序。
    先编译ProgressBar.dll;再编译Base.dll;最后编译UI.dll。
      

  4.   

    你这些条件  UI 做成 LIb
      

  5.   

    DLL相互依赖是没有问题的,但要注意在DllMain中不要再写什么LoadLibrary之类的语句,否则会导致DLL Hell之类的问题。