我使用LoadLibrary函数加载一个dll文件,部分代码如下:g_hGetWordInst = LoadLibrary("F:\\nhw32.dll");
if (!g_hGetWordInst)
{
AfxMessageBox("NHD_LoadGetWordLib loading error!");
return FALSE;
}
其中我的dll文件放在f盘,但是却总是提示未加载成功。由于现阶段暂时没学过dll编程,所以不能确定是否是我的LoadLibrary函数使用错误,请各位路人帮帮忙。
if (!g_hGetWordInst)
{
AfxMessageBox("NHD_LoadGetWordLib loading error!");
return FALSE;
}
其中我的dll文件放在f盘,但是却总是提示未加载成功。由于现阶段暂时没学过dll编程,所以不能确定是否是我的LoadLibrary函数使用错误,请各位路人帮帮忙。
===============
改成if(g_hGetWordInst==NULL)试试
这个库还有与之关联的其它库没找到
我就遇到过这个问题
你可以用DEPENDS看看
到你还有啥子库与这个库有依存关系
1.dll初始化时失败,这是因为dll本身有问题;
2.dll需要的其他dll文件不存在;
3.调用的dll再本地机器上不存在。请楼主自己检查,看是由那个引起的。
如果确认没有问题,就GetLastError()看下是什么错误!
然后设置断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 初始化到底出啥问题
LZ你去了解下DLL的加载过程是啥应该就清楚了LoadLibrary("F:\\nhw32.dll");中的路径应该是无意义的,我不是十分确定,你可以跟踪LoadLibrary进去看看
所以要么加到System32下。。要么自己目录
首先要检查前面建议的GetLastError
其次要借助depends工具看看是不是少啥依赖的库没有在机器上