我在A.dll中LoadLibrary(“B.dll”);总是失败,而且GetLastError()==0;实在无奈啊。难道在dll中LoadLibrary是有讲究的?

解决方案 »

  1.   

    不好意思,路径用了绝对的,C:\\B.dll还是不行
      

  2.   

    LoadLibrary以后,怎么失败的,返回的句柄为空?GetLastError返回什么
      

  3.   

    句柄为空,GetLastError是0是纯的WIN32 DLL
      

  4.   

    请问如果是MFC扩展DLL会怎样?
      

  5.   

    问题就出在B.dll的DllMain函数里面。
      

  6.   

    你确定你load的B.dll不依赖其他dll,如果你的B.dll依赖C.dll,在本目录和系统目录都找不到C.dll,那么B.dll会load失败。你可以用DEPENDS.EXE工具查看每个dll依赖的情况。
      

  7.   


    Error: The Side-by-Side configuration information for "c:\B.DLL" : DEPENDS.EXE给出的结果但是我的编译选项分明是调成embed manifest=yes
      

  8.   

    如果我embed manifest=no,在加载的时候会出现r6034的错误。
      

  9.   

    你的B.Dll依赖的其他DLL估计没有带上...还有你的manifest文件是否正确
      

  10.   


    恩,我将B.DLL变成一个MFC STATIC LINK的DLL,就可以加载了,有没有manifest文件的生成工具?我有两个dll是用perl写的,没办法在里面写manifest
      

  11.   

    也就是说如何在一个第三方的dll中加入内嵌的manifest,以使其可以被LoadLibrary
      

  12.   

    还有,要在一个纯洁的机器上加载一个win32的dll,该附带那些dll?
      

  13.   

    那就是你的MFC的DLL没有对应的带上,你需要带上MFC相关的DLL以及manifest
      

  14.   

    一般需要带上vc crt运行时库的dll,可以用depends查看一下dll依赖了哪些
      

  15.   

    基本上解决了这个问题:http://www.codeproject.com/KB/cpp/vcredists_x86.aspx,希望为能对以后再遇到同样问题的兄弟有帮助。另外,我不的不PK微软,解决dll hell的策略实在是不敢恭维。不过说实话,我也想不出比这个更好的方法了。呵呵。对了,最后一个问题,我用mt.exe还是不能为我的两个dll创建embed manifest,有没有人知道怎么手动添加不?
      

  16.   

    写好manifest文件,工程右键->属性 -》 manifest tool中 -》 Input and Output