请教大牛一个Dll调用的问题,谢谢
现在调用别人的一个dll文件,但是该dll有个bug,在一种特别的情况下,该dll就会内存越界,(该dll就是弹出一个窗口,然后在该窗口传一个较大字符串时,dll就会越界)。这样就会导致我自己本身的程序也会崩溃。
现在无法拿到该dll的源码,但是程序必须调用该dll(该dll还实现了其他很多功能),现在能有什么好的方法,可以让dll挂掉的时候,我自己的程序做一下保护,不至于挂掉什么的,谢谢。
[解决办法]
1 检查一下DLL是否支持ISupportErrorInfo接口
2 如果支持,可以在你自己的程序里,try catch 一下
3 如果不支持,则最好不要在进程内装载该DLL,让另一个服务器装载该DLL然后访问服务器
另外,这种问题最好提到VC/MFC下的ATL版里。
[解决办法]
1、可以使用进程外组件进行封装
2、可以使用SetUnhandledExceptionFilter进行结构化异常处理
3、当遇到较大字符串时在exe里对其进行截断
不过这样都不能解决根本问题,因为可能dll挂掉时可能留下某种隐患引发蝴蝶效应,
所以如果该DLL耦合不大的话,可以考虑对部分接口进行替换封装
[解决办法]
楼主不会用strncpy吗?
[解决办法]
如果try-catch不行, 按以下方法试试:
DLL提供的界面打开后, 在主调程序开辟线程函数, 里面获取对话框窗口指针, 遍历子控件获取到编辑框控件, 然后通过钩子函数截获编辑框字符变化的消息, 进行预处理(例如字符串数据过长时, 直接弹出消息框告诉用户不能输入过长的数据)
[解决办法]
如果你知道怎样调用他的函数让这个 DLL 崩溃!
那么就不要这样调用就好了!
同时不要直接暴露这个 DLL 的导出符号和接口。