exe动态调用A.DLL
A.DLL还会动态调用B.DLL
A.DLL和B.DLL在同一层路径,exe在A.DLL的上一层exe调用A.DLL方法:
m_hHandle = ::LoadLibraryEx ( _T("A.DLL的绝对路径") , NULL , LOAD_WITH_ALTERED_SEARCH_PATH );
A.DLL调用B.DLL方法
m_hHandle = ::LoadLibraryEx ( _T("B.DLL的绝对路径") , NULL , LOAD_WITH_ALTERED_SEARCH_PATH );
exe层调用LoadLibraryEx 报错GetLastError = 0
如果将A.DLL中静态加载B.DLL,exe层调用就没问题有什么好的解决方案吗?

解决方案 »

  1.   

    可以试试用 GetModuleFileName 获取模块本身的文件路径名, 然后构造出B.DLL 的绝对路径TCHAR szPath[MAX_PATH + 1] = {0};
    if(GetModuleFileName(AfxGetInstanceHandle( ),  szPath, MAX_PATT))
    {
      PathRemoveFileSpec(szPath); //去除当前模块文件名
      PathAppend(szPath, _T("B.DLL)); //追加B.DLL
      HMODULE hDLLB = LoadLibrary(szPath);
      if(hDLLB)
      {
         ……
         FreeLibrary(hDLLB);
      }
    }
      

  2.   

    Depends看了一下B.dll依赖的dll也全部都放在同一级目录了,exe层调用LoadLibrary报错GetLastError =1114
      

  3.   

    1114   A dynamic link library (DLL) initialization routine failed.  
    也就是B.DLL 的DllMain 返回了FALSE, 具体的原因的调试或写日志看了
      

  4.   

    Depends看了一下B.dll依赖的dll也全部都放在同一级目录了,exe层调用LoadLibrary报错GetLastError =1114
    需要看一下DllMain入口函数中调用了什么,做了什么操作?