社区
C++ 语言
帖子详情
请教大牛一个Dll调用的问题,谢谢
jjajun
2012-07-09 10:19:15
现在调用别人的一个dll文件,但是该dll有个bug,在一种特别的情况下,该dll就会内存越界,(该dll就是弹出一个窗口,然后在该窗口传一个较大字符串时,dll就会越界)。这样就会导致我自己本身的程序也会崩溃。
现在无法拿到该dll的源码,但是程序必须调用该dll(该dll还实现了其他很多功能),现在能有什么好的方法,可以让dll挂掉的时候,我自己的程序做一下保护,不至于挂掉什么的,谢谢。
...全文
157
12
打赏
收藏
请教大牛一个Dll调用的问题,谢谢
现在调用别人的一个dll文件,但是该dll有个bug,在一种特别的情况下,该dll就会内存越界,(该dll就是弹出一个窗口,然后在该窗口传一个较大字符串时,dll就会越界)。这样就会导致我自己本身的程序也会崩溃。 现在无法拿到该dll的源码,但是程序必须调用该dll(该dll还实现了其他很多功能),现在能有什么好的方法,可以让dll挂掉的时候,我自己的程序做一下保护,不至于挂掉什么的,谢谢。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Liberty-Bird
2012-07-09
打赏
举报
回复
如果try-catch不行, 按以下方法试试:
DLL提供的界面打开后, 在主调程序开辟线程函数, 里面获取对话框窗口指针, 遍历子控件获取到编辑框控件, 然后通过钩子函数截获编辑框字符变化的消息, 进行预处理(例如字符串数据过长时, 直接弹出消息框告诉用户不能输入过长的数据)
赵4老师
2012-07-09
打赏
举报
回复
楼主不会用strncpy吗?
jjajun
2012-07-09
打赏
举报
回复
[Quote=引用 2 楼 的回复:]
1、可以使用进程外组件进行封装
2、可以使用SetUnhandledExceptionFilter进行结构化异常处理
3、当遇到较大字符串时在exe里对其进行截断
不过这样都不能解决根本问题,因为可能dll挂掉时可能留下某种隐患引发蝴蝶效应,
所以如果该DLL耦合不大的话,可以考虑对部分接口进行替换封装
[/Quote]
谢谢,
“可以使用进程外组件进行封装”,这个是什么意思??
“可以使用SetUnhandledExceptionFilter进行结构化异常处理"这个也不明白是什么意思?
大字符串也是在dll的窗口中进行输入的,我的程序肯定是不能进行任何的捕获的,所以也是没有办法的。
主要是该窗口功能是整个dll的一个很小部分,而且也是在特定的场景下就会发生的。所以,除非不用这个SDT,否则,用户一旦操作该步骤,我的主程序就会挂掉,这样用户肯定不能接受的,
我现在只是不想程序挂掉,最好,还能提示一下用户输入的字符串太长什么的,总之,主程序肯定是在任何场景下都不能挂的。
jjajun
2012-07-09
打赏
举报
回复
[Quote=引用 3 楼 的回复:]
还是让它挂掉好
能不能避免出现挂掉的情形?
crashrpt和breakpad都能捕捉崩溃,并生成dump文件,可以在崩溃现场显示出谁崩溃了
[/Quote]
出现问题的窗口,只是他的一个小窗口,平时根本没有人用,而且也是在特定的场景才会出现,所以,最好还是不要让主程序挂掉,这样用户体验不好。
另外,就算捕捉到出现的地方也没有用,因为出现的地方肯定不是在我的代码里,问题肯定是出在dll的代码里,我这边没有源码,也是无法进行修改的
jjajun
2012-07-09
打赏
举报
回复
[Quote=引用 1 楼 的回复:]
1 检查一下DLL是否支持ISupportErrorInfo接口
2 如果支持,可以在你自己的程序里,try catch 一下
3 如果不支持,则最好不要在进程内装载该DLL,让另一个服务器装载该DLL然后访问服务器
另外,这种问题最好提到VC/MFC下的ATL版里。
[/Quote]
谢谢。
该Dll只有一个接口,没有其他接口。我程序只是调用的他的一个函数接口,具体弹出对话框什么的流程,
肯定封装在这个接口里面的,所以,比较麻烦。
其实,该dll还是实现了其他很多的功能,出问题的窗口只是他很多窗口中的某一个窗口而已。
现在想屏蔽这个窗口也不行,因为,所以的功能都被封装在dll中了。
另外想问一下“则最好不要在进程内装载该DLL,让另一个服务器装载该DLL然后访问服务器”这个是什么意思,怎么实现。
ouyh12345
2012-07-09
打赏
举报
回复
还是让它挂掉好
能不能避免出现挂掉的情形?
crashrpt和breakpad都能捕捉崩溃,并生成dump文件,可以在崩溃现场显示出谁崩溃了
Coder_Y_Jao
2012-07-09
打赏
举报
回复
1、可以使用进程外组件进行封装
2、可以使用SetUnhandledExceptionFilter进行结构化异常处理
3、当遇到较大字符串时在exe里对其进行截断
不过这样都不能解决根本问题,因为可能dll挂掉时可能留下某种隐患引发蝴蝶效应,
所以如果该DLL耦合不大的话,可以考虑对部分接口进行替换封装
happytengfei
2012-07-09
打赏
举报
回复
1 检查一下DLL是否支持ISupportErrorInfo接口
2 如果支持,可以在你自己的程序里,try catch 一下
3 如果不支持,则最好不要在进程内装载该DLL,让另一个服务器装载该DLL然后访问服务器
另外,这种问题最好提到VC/MFC下的ATL版里。
Saleayas
2012-07-09
打赏
举报
回复
如果你知道怎样调用他的函数让这个 DLL 崩溃!
那么就不要这样调用就好了!
同时不要直接暴露这个 DLL 的导出符号和接口。
翅膀又硬了
2012-07-09
打赏
举报
回复
多测试,找规律,保证调用时候的参数不太大
jjajun
2012-07-09
打赏
举报
回复
[Quote=引用 7 楼 的回复:]
楼主不会用strncpy吗?
[/Quote]
^_^,现在是拿不到源码,要是源码在手,什么问题都好解决了。
Windows进程常用
DLL
模块注入技术
进程调试级注入,涉及调试器相关功能
调用
知识点
dll
模块重定位内存注入,模拟操作系统加载PE文件方式,直接将
dll
文件内存数据写入目标进程并执行。 导入表注入,涉及PE相关知识点,增加区段,移动导入表,增加导入...
如何向
大牛
提问?
篇之前,为避免大家误解,先澄清一下,俺不是
大牛
,亦不是高手,只是
一个
习惯于和大伙分享经验的菜鸟。既然如此,为什么要拟这么
一个
标题呢?没办法,因为我觉得如果将"
大牛
"替换为"别人",或是"高手",甚至是去掉,...
vb
调用
matlab显示错误,vb
调用
matlab生成的
dll
出错。
M函数文件代码: function flowtype1(k,j,g,o,t,h) q=0.001:0.001:10; dpsg=64/t*100*k*(t/100*q*k/g).^(-1).*q.^2/2; Y=(j-k)*9.8*sin(o)./dpsg;...出现对象不支持该属性和方法的提示,
请教
大牛
哪里出错了,
谢谢
大家。
如何向
大牛
提问
如何向
大牛
提问
c语言多文件编程,即main文件
调用
其他.c文件的方法
c语言多文件编程,即main文件
调用
其他.c文件的方法 原创 天泉证道 最后发布于2018-11-14 14:46:32 阅读数 4047 收藏 展开 c语言多文件编程,即main文件
调用
其他.c文件的方法。 两种方法的区别就是,gcc编译时,是否...
C++ 语言
64,648
社区成员
250,476
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章