loadlibrary _ExceptInit memcpy access in invalid menory

mimong_lin 2008-06-27 01:03:03
我在一个循环中,对从一个目录下用获取到的DLL文件,进行LoadLibrary, GetProcAddress, FreeLibrary,三个操作.但是对于有的DLL文件,在LoadLibrary的时候,CodeGuard 提示 access in invalid menory.CodeGuard日志如下:

Error 00193. 0x100400 (Thread 0x0908):
Access in invalid memory: Attempt to access 156 byte(s) at 0x0209BB8C.
memcpy(0x00154E48, 0x0209BB8C, 0x9C [156])

Call Tree:
0x020863A2(=CashOperSquadDatesRpt.dll:0x01:1153A2)
0x01F716F1(=CashOperSquadDatesRpt.dll:0x01:0006F1)
0x7C93CBAB(=ntdll.dll:0x01:01BBAB)
0x7C936178(=ntdll.dll:0x01:015178)
0x7C9362DA(=ntdll.dll:0x01:0152DA)
0x7C801BB9(=kernel32.dll:0x01:000BB9)

------------------------------------------
编译已经是使用Full Debug了,但记录到的信息就是这么多.

请教这是为什么?是不是我的DLL文件有问题?

但如果将这个出问题的DLL文件,单独放在目录下或者是和其它1 ~ 4 个一起的话,又是没提示的.

如下是我的书写代码:

AnsiString fullFileName = Format("%s\\%s", ARRAYOFCONST((m_reportDirectory, reportFileName)));
char fileName[MAX_PATH];
memset(fileName, 0, MAX_PATH);
strcpy(fileName, fullFileName.c_str());
dllIns = ::LoadLibrary(fileName);

...全文
79 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
killking06 2011-04-11
  • 打赏
  • 举报
回复
我是来学习的!
mimong_lin 2008-06-30
  • 打赏
  • 举报
回复
问题没出现了.不是代码的问题.
我把c++ builder 6卸载了重新装,重编译,不行;重建项目文件,把其它文件添加进来,再编译,就OK了.

折腾了一个星期,就这样解决法,无语!
jacknes009 2008-06-28
  • 打赏
  • 举报
回复
看看你的编译成DLL文件的那段代码。。。
mimong_lin 2008-06-28
  • 打赏
  • 举报
回复
楼上和1楼的说法是一样.只是,我不理解你说的"调试下DLL"是什么意思,应该单个文件的话,是没问题的,DLL中的导出函数调用也是OK的.就是在多个文件循环加载卸载的时候,出的这个文件.

请问,怎么确定这个DLL是不是有问题?
jxw1987628 2008-06-27
  • 打赏
  • 举报
回复
你的那个dll有木有问题的?我觉得你可以调试下dll
i_love_pc 2008-06-27
  • 打赏
  • 举报
回复
不见季老大好多年。
mimong_lin 2008-06-27
  • 打赏
  • 举报
回复
路径是没错的,这个Code Guard记录的虽然是访问了无效的内存,但是最后是可以加载DLL中,我用的也是长路径的.
mimong_lin 2008-06-27
  • 打赏
  • 举报
回复
不好意思,把3楼的意思看错了.
loveshell 2008-06-27
  • 打赏
  • 举报
回复
http://topic.csdn.net/t/20040608/04/3072223.html

看看是不是路径有问题
cppowner 2008-06-27
  • 打赏
  • 举报
回复
不懂接分
mimong_lin 2008-06-27
  • 打赏
  • 举报
回复
谢谢LS的.

我现在的做法是,连GetProcAddress操作都不要了,就只是装载和卸载.还是一样的问题.

1 "DLL中访问了无效的地址","DLL 中错误的使用了指针", DLL的入口函数中没有任何操作,我想应该不会是这两方面的原因.

2 虽然继承的DLL中没有静态变量,但是在一些多个DLL公用的文件中,都定义着全局变量, 这个相关性大一点了?
而且在不同的DLL中,都定义了一些相同的变量,这会否也是问题?
loveshell 2008-06-27
  • 打赏
  • 举报
回复
在网上找到的几个可能的原因
1.DLL中访问了无效地址:即访问的变量或结构体没有被初始化或被函数输出值初始化等
2.DLL 中错误的使用了指针.
3.继承的基类中有静态的变量,而此基类又在另一个dll中。
mimong_lin 2008-06-27
  • 打赏
  • 举报
回复
我也认识是DLL文件的问题.
但是,我现在只是LoadLibrary都出问题,不知道你说的调试DLL是怎么个调试法?
  • 打赏
  • 举报
回复
你能不能调试dll ?
那先调试一下dll,应该是dll的问题。

13,826

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder相关内容讨论区
社区管理员
  • 基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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