调用动态链接库后程序自动退出问题?

learsh1024 2010-11-01 10:58:30
请教一个问题,我利用LoadLibrary方式动态调用了一个DLL,但是每次调用后我的主程序就自动退出了(当然调用的功能实现了)。我想请问一下这种情况是由于DLL中强制关闭句柄造成的,还是我调用有问题呢?这个DLL不是自己写的,只给我提供了接口和功能描述,没有源代码。
...全文
492 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
learsh1024 2010-11-04
  • 打赏
  • 举报
回复
非常感谢各位的关注!!
问题解决了。
typedef int(_stdcall pMax)(int a,int b);
HINSTANCE hDLL=LoadLibrary("MyDll.dll");//加载动态链接库MyDll.dll文件;
PMax Max=(pMax)GetProcAddress(hDLL,"Max");
A=Max(5,8);
FreeLibrary(hDLL);//卸载MyDll.dll文件;
我把typedef int(_stdcall pMax)(int a,int b);这句放在类定义之前,作为全局声明,就没有再出现报错或调用一次就退出的情况了。
希望对碰到同类问题的朋友有帮助。
learsh1024 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wangchaoyu2001 的回复:]

"调完DLL后,主程序就自动退出."是什么意思?
LoadLibrary之后主程序退出?
还是
GetProcAddress加载了DLL的函数后,调用所加载的函数……
[/Quote]

是加载了DLL后,调用所加载函数的过程中报错。如果不是调试状态的话,就是执行了所加载的函数后,主程序自动退出。
learsh1024 2010-11-02
  • 打赏
  • 举报
回复
对了,还要加一句,报错时DLL中函数的功能已经实现了,也就是说,DLL函数已执行。
learsh1024 2010-11-02
  • 打赏
  • 举报
回复
非常感谢各位的帮助!我用同样的方法调用了其他的DLL,一切正常。于是对出问题的DLL的调用过程进行调试。系统报错为:User breakpoint called from code at 0x1023160.错误出现时,已正确加载了DLL,并且是在使用DLL函数的过程中提示错误的。各位能不能告诉我,这个错误是什么原因引起的呢?
charleswangchaoyu 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 learsh1024 的回复:]
引用 8 楼 wangchaoyu2001 的回复:

"调完DLL后,主程序就自动退出."是什么意思?
LoadLibrary之后主程序退出?
还是
GetProcAddress加载了DLL的函数后,调用所加载的函数……


是加载了DLL后,调用所加载函数的过程中报错。如果不是调试状态的话,就是执行了所加载的函数后,主程序自动退出。
[/Quote]

看看dll中被你调用的那个函数的声明,是否带WINAPI前缀.再看看你自己程序里对函数指针的声明是否也带WINAPI前缀,做到和dll的声明一致.
jacktion2004 2010-11-02
  • 打赏
  • 举报
回复
用OD跟踪调试一下,就知道问题在哪里了。
zzz_zou 2010-11-01
  • 打赏
  • 举报
回复
你得跟踪, 是否是DLL函数导致你的程序退出!
learsh1024 2010-11-01
  • 打赏
  • 举报
回复
是的,我调用完了DLL后,主程序就自动退出了。由于没有DLL的源代码,我现在也不知道它是否包含了退出主程序的语句。谢谢两位的关注!那这个问题是否可以理解为不是我调用不当产生的?
ouyh12345 2010-11-01
  • 打赏
  • 举报
回复
调试一下
估计使用了释放后的指针
superarhow 2010-11-01
  • 打赏
  • 举报
回复
估计你得跟踪一下.DLL如果调用了exit或者TerminateProcess就可以退出主程序.或者如果你是窗口应用的话,它如果PostQuitMessage也能造成你退出.API好下断点,但是用库函数的就麻烦点了.
zzz_zou 2010-11-01
  • 打赏
  • 举报
回复
使用DLL的导出函数后就自动退出了?
手机写程序 2010-11-01
  • 打赏
  • 举报
回复
等你真的要退出时才去free它就好了.
wnx_u 2010-11-01
  • 打赏
  • 举报
回复
你的情况是不是在getprocaddress后,执行相应的函数就会导致程序退出啊,如果是的话你看一下函数指针是否有郊,参数是否传对,在那个函数里面是否有对界面进行操作等
charleswangchaoyu 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 learsh1024 的回复:]
是的,我调用完了DLL后,主程序就自动退出了。由于没有DLL的源代码,我现在也不知道它是否包含了退出主程序的语句。谢谢两位的关注!那这个问题是否可以理解为不是我调用不当产生的?
[/Quote]
"调完DLL后,主程序就自动退出."是什么意思?
LoadLibrary之后主程序退出?
还是
GetProcAddress加载了DLL的函数后,调用所加载的函数导致退出?
zhouyongku 2010-11-01
  • 打赏
  • 举报
回复
我以前做过在调用完DLL后关闭进程,或许你可以看看是不是这样的。
wnx_u 2010-11-01
  • 打赏
  • 举报
回复
如果你确定你自己的代码没有问题,那你看一下提供DLL的接口文档,看一下是否有什么注意事项

15,471

社区成员

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

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