问题描述:
   我写了一个应用程序,需要调用几个Dll,一共有3个,包括a.dll ,b.dll, c.dll;
其中,我的应用程序直接调用a.dll,同时在应用程序里面做设置来选择需要最终调用b.dll还是c.dll之中的内容,b.dll和c.dll是被a.dll静态调用的,还有一点,b.dll和c.dll之中的函数名字基本都是一样的;
请问我如何在a.dll之中做操作,来完成dll的选则和调用?多谢了!

解决方案 »

  1.   

    Loadlibrary的时候加载不同的dll即可。
      

  2.   

    因为函数太多,所以我需要静态调用然后对编译后的DLL进行选择
      

  3.   

    b.dll和c.dll是被a.dll静态调用的b和c的函数名字都是一样的,只是功能不同。有什么好办法吗?
      

  4.   

    b.dll和c.dll是被a.dll静态调用的 
    =============================
    不懂,dll还能静态调用吗?
      

  5.   

    好像没有办法,本来b.dll和c.dll中的函数名相同只能用动态加载的方法就行了,你非要用隐式加载的方法
      

  6.   

    b和c一个名字又要静态调用,编译肯定是冲突的,不可能办到
    要换个方法
    1)做成COM接口,可现在很少用COM了
    2)改成MFC扩展DLL,用类把导出函数包装起来,再加个虚类做派生。b,c两个类名不同。
    然后在a中选择new某个类,得到虚类指针。就行了。
      

  7.   

    还可以用延迟加载DLL方法,就是只有当你真正开始调用它的某个函数时,DLL才会加载就去,这样你就能够在没用之前进行选择。
    实现:
    1,b.dll和c.dll的导出函数要一样
    2,主程序只能链接其中一个lib,如b.lib。你要链接两个话的话必然会函数名相同冲突
      另外要链接一个叫DelayImp.lib的lib,并增加链接选项/DelayLoad:b.dll
    3,在选择DLL前不要调用任何b.lib中的函数。
    4,若选择用c.dll,就把c.dll复制成b.dll。然后就可以开始调用b.lib中的函数了,主程序这时会加载d.dll(实际上它是c.dll)
    5,若选择用b.dll,那就不用说了。