我使用LoadLibrary函数加载一个dll文件,部分代码如下:g_hGetWordInst = LoadLibrary("F:\\nhw32.dll");
if (!g_hGetWordInst)
{
AfxMessageBox("NHD_LoadGetWordLib loading error!");
return FALSE; 
}
其中我的dll文件放在f盘,但是却总是提示未加载成功。由于现阶段暂时没学过dll编程,所以不能确定是否是我的LoadLibrary函数使用错误,请各位路人帮帮忙。

解决方案 »

  1.   

    检查dll文件名,路径是否正确...
      

  2.   

    支持楼上,如果Dll路径名正确的话,请检查Dll是否又使用到别的库文件的功能,也就是说额外依赖项。
      

  3.   

    注意 LoadLibrary() 等函数的 Unicode 问题。
      

  4.   

    if (!g_hGetWordInst)
    ===============
    改成if(g_hGetWordInst==NULL)试试
      

  5.   

    那个dll可能有bug,初始化的时候异常了,LoadLibrary也是返回失败
      

  6.   

    我觉得最大的可能是
    这个库还有与之关联的其它库没找到
    我就遇到过这个问题
    你可以用DEPENDS看看
    到你还有啥子库与这个库有依存关系
      

  7.   

    加载dll失败,原因大致有:
    1.dll初始化时失败,这是因为dll本身有问题;
    2.dll需要的其他dll文件不存在;
    3.调用的dll再本地机器上不存在。请楼主自己检查,看是由那个引起的。
      

  8.   

    出现这种情况原因可能有三个:DLL文件路径错误;参数类型(ANSI还是UNCODE);函数的返回值,好好地查一查该函数的返回值.
      

  9.   

    不要瞎猜,看看GetLastError()先
      

  10.   

    看下是不是DLL文件名、或者路径问题
    如果确认没有问题,就GetLastError()看下是什么错误!
      

  11.   

    挂VC调试器,断LoadLibrary上
    然后设置断ntdll.RtlActivateActivationContextUnsafeFast上这个函数执行完返回后的样子应该是类似于
    7C93C49C   .  FF76 48       PUSH DWORD PTR DS:[ESI+48]
    7C93C49F   .  8D85 64FFFFFF LEA EAX,DWORD PTR SS:[EBP-9C]
    7C93C4A5   .  50            PUSH EAX
    7C93C4A6   .  E8 ED4CFEFF   CALL ntdll.RtlActivateActivationContextUnsafeFast
    7C93C4AB   .  C745 FC 02000>MOV DWORD PTR SS:[EBP-4],2
    7C93C4B2   .  66:837E 3A 00 CMP WORD PTR DS:[ESI+3A],0
    7C93C4B7   .  0F85 D83D0100 JNZ ntdll.7C950295
    7C93C4BD   >  803D 10C3997C>CMP BYTE PTR DS:[7C99C310],0
    7C93C4C4   .  0F85 BDE00100 JNZ ntdll.7C95A587
    7C93C4CA   >  FF75 08       PUSH DWORD PTR SS:[EBP+8]                               ; /Arg4 = 62C22EAD
    7C93C4CD   .  33FF          XOR EDI,EDI                                             ; |
    7C93C4CF   .  47            INC EDI                                                 ; |
    7C93C4D0   .  57            PUSH EDI                                                ; |Arg3 = 00000001
    7C93C4D1   .  FF76 18       PUSH DWORD PTR DS:[ESI+18]                              ; |Arg2 = 62C20000
    7C93C4D4   .  53            PUSH EBX                                                ; |Arg1 = 62C22EAD
    7C93C4D5   .  E8 9C4CFEFF   CALL ntdll.7C921176                                     ; \ntdll.7C921176
    7C921176是关键。
    跟进入它里面里面的东西很简单,只有一个往下层的函数调用:
    7C921187  |.  FF55 08       CALL NEAR DWORD PTR SS:[EBP+8]        跟入它,它就是到你的DLL的入口点(可能不是dllmain)了。
    自己看下那nhw32.dll 初始化到底出啥问题
      

  12.   

    晕为了dll载入失败没必要跟进API里吧
    LZ你去了解下DLL的加载过程是啥应该就清楚了LoadLibrary("F:\\nhw32.dll");中的路径应该是无意义的,我不是十分确定,你可以跟踪LoadLibrary进去看看
    所以要么加到System32下。。要么自己目录
      

  13.   

    我估计你这个库nhw32.dll,本身生成DLL时就调用了其他的DLL的支持,虽然你的nhw32.dll存在在你的盘符下也有它,但是你这个nhw32.dll实际也调用了其它的DLL......所以你loadLibrary()初始化不成功......
      

  14.   

    你也太狠了,这么简单的一个问题,要这么复杂的方法干嘛?
    首先要检查前面建议的GetLastError
    其次要借助depends工具看看是不是少啥依赖的库没有在机器上
      

  15.   

    LoadLibrary("F:\\nhw32.dll");中的路径应该是无意义的路径有意义。。上面说错