LoadLibrary出现异常. 0xe06d7363 怎么解决?

xirumin 2007-11-09 06:55:14
有一个NormalOrder.Dll, 是别人写的. 用Depends查看, 发现里面还有引入的UniversalRes.Dll
写一简单程序
LoadLibrary("NormalOrder.dll"); 这一句有问题. GetLastError返回了0xe06d7363
用OllyDbg跟踪, 确实是此句出现异常. 如果换成其它Dll则无问题.
用ExeScope查看, 这两个Dll中都包含了对话框资源. 一开始怀疑是里面用了Sockets, 在工程编译选项中, 设置了Ws2_32.Lib 问题依然存在.
将两个文件改名也不行.
请大家指点一下.
...全文
1866 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
KuKayYou 2012-07-24
  • 打赏
  • 举报
回复
我也遇到过这个问题,这是指针指空了, 检查一下是不是 SQL语句写错了
xirumin 2007-11-15
  • 打赏
  • 举报
回复
确实如上面echoher所说, 这是一个MFC程序. 如果用MFC自动生成一个对话框程序,再次调用就没问题了
原因是MFC的程序在InitInstance前,用initterm先行初始化了模块, 其中有程序的地址(0X00400000), 这样
在DLL中(估计也是MFC自动生成再添加的代码)初始化时, 用到AfxGetModuleState时, 可以得到进程的模块变量. 否则得不到, 初始化不成功返回FALSE了, 导致DLL装载不上.
sunlin7 2007-11-10
  • 打赏
  • 举报
回复
我估计是路径问题, 你将你的程序放到normalorder.Dll所在目录试试看,----如果normalorder.Dll中动态加载其目录下面的DLL而没有严格的出错检查就会出现内存访问异常.
xirumin 2007-11-10
  • 打赏
  • 举报
回复
现在的问题是, 为何别人的程序可以加载成功, 我仿照他程序反向的就不成功呢?
我说一下别人程序的主要流程
主程序中Initialize() --> 先加载一个Frame.Dll -->执行主程序的DoDataTransfer()函数, ---在此函数中调用
Frame.Dll中的DoDataTransfer()函数, 然后加载其它DLL.
我仿照的程序几乎完全一样, 也是先加载的Frame.Dll, 再传递一样的参数给Frame::DoDataTransfer()
已找到跟踪调试异常DLL的门路.

等找到真正的原因后, 来这里结贴
echoher 2007-11-10
  • 打赏
  • 举报
回复
在DLL中afxRegisterClass似乎表明是一个MFC程序,你改用MFC的对话框程序调用试一下
缔峰泽科技 2007-11-10
  • 打赏
  • 举报
回复
有的问题可能是资源ID值的问题,我最近就碰到这种问题,改ID值试试
xirumin 2007-11-10
  • 打赏
  • 举报
回复
与路径无关
现在跟踪NormalOrder.dll中的DllMain函数, 再细跟到初始化时, 有这一句
AfxRegisterClass(), 结果是返回FALSE, 往下就是MFC自动抛出异常了.

什么情况下会使注册类失败呢?
zhangyanli 2007-11-09
  • 打赏
  • 举报
回复
是vc6的话,不支持RTTI,需要设置的。

project->setting->c&c++->c++ Language->enable run-time type information(RTTI)

试试。
xirumin 2007-11-09
  • 打赏
  • 举报
回复
多谢楼上参与. 现在的进展是:用OllyDbg中的LoadDll加载此NormalOrder.Dll, 然后单步往下跟踪
到某一函数内部, 一定会弹出异常E06D7363. 堆栈上可以看到字符串"Access violation - no RTTI data!"

是某在编译选项上做文章就可能会调用LoadLibrary成功呢?
xirumin 2007-11-09
  • 打赏
  • 举报
回复
用OllyDbg加载NormalOrder.dll, 提示会用LoadDll来打开, 确定
按F8粗过一遍. 一样有异常产生.

再来一次, 手动将参数改为DLL_THREAD_ATTACH (2). 再按F9执行. 成功了.

zhoujianhei 2007-11-09
  • 打赏
  • 举报
回复
内存访问异常
可能这个DLL使用了其它的一些文件什么的吧,没有找到所以引发了该异常。
xirumin 2007-11-09
  • 打赏
  • 举报
回复
3楼的程序
如果改为
LoadLibraryEx("normalorder.Dll",NULL,DONT_RESOLVE_DLL_REFERENCES);
就一点问题没有. 怀疑是DllMain中返回了FALSE.
xirumin 2007-11-09
  • 打赏
  • 举报
回复
因为是要反向别人的程序. 没有DLL文档, 没有源代码
龙凤呈祥焱 2007-11-09
  • 打赏
  • 举报
回复
看DLL的文档吧.
xirumin 2007-11-09
  • 打赏
  • 举报
回复
楼上两位的方法都试过.
不行!
凤矶 2007-11-09
  • 打赏
  • 举报
回复
LoadLibrary( _T("NormalOrder.Dll"));
liu280531510 2007-11-09
  • 打赏
  • 举报
回复
你要给出dll的说明档。
你的调用大有问题!
到网上找一大把
xirumin 2007-11-09
  • 打赏
  • 举报
回复
控制台程序代码如下:

#include "stdafx.h"
#include <windows.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
HANDLE h_dll;
DWORD dwError;
h_dll = (HANDLE)LoadLibrary(".\\Dlls\\NormalOrder.Dll");
dwError = GetLastError();
printf("h_dll is %08X, and LastError is %08X\n",h_dll,dwError);
return 0;
}

输出如下:
h_dll is 00000000, and LastError is E06D7363
Press any key to continue
xirumin 2007-11-09
  • 打赏
  • 举报
回复
我的调用代码如下:

#include "stdafx.h"
#include <stdlib.h>

int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
// TODO: Place code here.
HANDLE h_test=NULL;
DWORD dwError;
char szError[20];
h_test = LoadLibrary(".\\Dlls\\NormalOrder.dll"); //换其它很多dll无问题
dwError = GetLastError();
itoa(dwError,szError,10);
MessageBox(NULL,szError,"",0);
return 0;
}
xirumin 2007-11-09
  • 打赏
  • 举报
回复
补充一下:
两个动态链接库normalOrder.dll和universalRes.Dll用FileInfo查看, 都是用VC6.0编写的, 一开始怀疑是Delphi写的.

用OllyDbg跟踪别人的程序, 发现其中动态加载NormalOrder.dll无问题, 自己写的程序加载其它Dll也无问题, 但一加载NormalOrder.dll就发生异常.
加载更多回复(1)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧