在一个dll A中动态加载dll B 失败!
加载代码如下!
typedef int(* lpcFun)(char*); HINSTANCE hDll; lpcFun GetFileFun; hDll = LoadLibrary("D:\\DPM.dll");//失败
if(hDll != NULL)
{
GetFileFun = (lpcFun)GetProcAddress(hDll,"DPM_FileCommunion");

if(GetFileFun!=NULL)
{
a=GetFileFun(m_szSelFileName);
}
else
{
MessageBox(NULL,"函数加载失败","加载",MB_OK);
}
}
else
{
MessageBox(NULL,"DLL加载失败","加载",MB_OK);
}
嵌套加载有什么需要注意的么?

解决方案 »

  1.   

    不是在DllMain中执行的吧?不能在DllMain中加载其他DLL,否则系统会死锁
      

  2.   

    原因1:你提供的D:\\DPM.dll不是一个真正的dll,系统无法加载(可能性最大),你可以使用depends来看看该dll;
    原因2:出现了dll hell(可能行比较小),和jameshooo的解释类似。
      

  3.   

    你在dll A中做一个接口,加载dll B,看有问题没?
    如果没有问题,说明你以前的加载时机有问题
      

  4.   

    看看错误代码是什么?可能DPM.dll还需其它库的支持,但你的目录中没有
      

  5.   

    不是在DLLMain中加载的,是一个函数中加载
    DLL是真的有倒出函数!!
      

  6.   

    A 是shell扩展dll!
    得到错误126!
      

  7.   

    ERROR_MOD_NOT_FOUND
    126 The specified module could not be found. 还是路径不对
      

  8.   

    找不到指定模块,可能DPM.dll还需要其它库的支持,但你的目录中没找到
      

  9.   

    Shell 扩展DLL是Com组件吧,你不需要LoadLibrary直接加载,需要用Com接口调用
      

  10.   

    如果A DLL调用DLL B ,而B调用了DLL C,而我没有C,这种情况会调用成功么?
      

  11.   

    就是因为少了C.dll,如果c还调用了d,则也必须有d.dll直到最后一个是独立的dll为止。就像一颗大树要找遍它的枝叶一样,必须全部找到才可以正确执行,呵呵。
      

  12.   

    晕死啊!
    DPM.dll是别人提供的,好象是要加载其它dll ,我这个需要DPM.dll中的一个函数返回值做判断
    只给了我一个DLL,
    去问下!
      

  13.   

    哦,和DPM.dll一个目录!!
    谢谢,各位!
      

  14.   

    错误码126表示D:\\DPM.dll不存在,或者D:\\DPM.dll所依赖的其它dll不存在。