我碰到一个问题,就是有两套动态库,都使用了同一个dll文件,只不过版本不一样,而我的程序又需要分别调用这两套动态库,所以我目前的做法就是,把两套动态库都放在一起,将名称一样的dll只保留一份,但是我发现不管是保留新的还是旧的,未保留的那套dll就无法调用了。
我又想到一个办法,就是把两套dll分别放在不同的文件夹下,然后再想办法使用,但是目前我不清楚这样行不行,请问大家有没有什么好办法解决一下?

解决方案 »

  1.   

    用 把两个版本的DLL改不同的名字 用 LoadLibrary 和 GetProcAddress 的方法
      

  2.   

    可是那个dll并不是由我直接调用的,如果是直接调用,那你说的这个方法确实就解决问题了。
      

  3.   

    问题详细描述:
    1,是两套动态库,不是两个动态库文件
    2,两套动态库文件中有一些dll是一样的,仅仅版本不一样
    3,我调用其中一套动态库时,不是加载所有的dll,而是其中一个dll,然后由他去调用其他的dll
    4,那些冲突的dll,不是由我直接调用
    这样应该清楚了吧,zgl7903的建议,如果是两个文件,那就解决问题了。
    我自己也在研究中,如果有结果,我再贴上来,也希望朋友们帮助我一下。
      

  4.   

    加载DLL的搜索顺序首先是当前目录,其次是系统目录。所以把两套DLL放两个不同目录的话,如果每套DLL只在一个目录中没有子目录的话,估计是可以的。如果还有子目录,那就要看运气了,也许写代码的人指定了相对路径,那样的话就可以。
      

  5.   

    那么如果你将这两套库拷贝到两个文件夹,应该有效吧。弄到俩文件夹后,其实也可以把他当成一个dll文件看待
      

  6.   

    这个问题已经解决了,我使用如下方式就可以将不同的dll放在不同目录下,然后加载访问了:
    ::LoadLibraryEx(strPath, NULL, LOAD_WITH_ALTERED_SEARCH_PATH)
    其中,strPath就是要加载的dll的绝对路径,然后系统会自己去搜索dll目录下的其他dll。