我使用PB调用一个Delphi DLL(多线程套接字dll)文件,当PB应用程序窗体关闭时,它并没有真正终止,它仍然保留在任务管理器中!为什么?如何在powerbuilder应用程序终止后发布 多线程套接字DLL? 在此先感谢您的回复!PowerBuilder应用程序调用Delphi DLL
回答
如果Powerbuilder应用程序真正终止,那么使用PowerBuilder应用程序加载的Delphi编写的dll不会执行任何网络通信。
在windows中,在Powerbuilder终止它之后,任何事情都不可能让你的进程保持活跃状态,除非这个东西是由delphi DLL创建的delphi DLL内的线程。
我建议你使用delphi调试器来监视应用程序中存在的线程。你可以从你的delphi IDE启动你的powerbuilder应用程序,打开你的delphi项目(用于构建DLL)并设置项目运行选项,以便运行加载该DLL的powerbuilder应用程序是“可执行的” Delphi IDE中的RUn - >参数对话框。
现在运行调试中的所有东西(delphi IDE工具栏中的绿色箭头按钮)并打开线程面板,并观察在delphi应用程序中启动的线程。如果没有任何额外的线程由delphi DLL启动(比如powerbuilder主线程是唯一可以看到的线程),那么Delphi DLL不可能让你的应用程序保持打开状态。
事实上,最可能发生的事情是您的程序因为powerbuilder或DLL中的一些基本问题而冻结(崩溃)。再一次,解决这个问题可能需要你使用powerbuilder和delphi进行一些调试。更多的信息会帮助人们帮助你。
Warren原来的问题是这是一个用Delphi编写并由PowerBuilder加载的多线程套接字DLL。你花了五段时间基本上重申了原来的问题。 :)问题很可能是DLL运行的线程没有正确地被终止,并且PB正在等待DLL卸载或者在它完全退出之前发信号;这就是为什么我要求OP提供更多信息。 (克里斯的评论立即跟随我的观点,指出OP不恰当地使用“终止”和“表单关闭”) –
感谢@KenWhite和@ Chris的帮助!我已经用妥协方法解决了这个问题:
'procedure DllMain(Reason :整数); 开始 案例原因 DLL_PROCESS_ATTACH: 开始 客户端:= TAppClient。创建; 结束; DLL_THREAD_ATTACH: begin end; DLL_THREAD_DETACH: begin end; DLL_PROCESS_DETACH: begin Client.Free; TerminateProcess(GetCurrentProcess,0); //这一行 end; 结束; end;' –
但是这种方法只适用于用PB(或Delphi)静态调用DLL,否则会终止主应用程序〜 –
- 1. 从DLL调用应用程序创建的Delphi DLL
- 2. 运行PowerBuilder应用程序
- 3. Delphi应用程序调用cobol应用程序 - >错误
- 4. 从C#.NET应用程序调用Delphi DLL
- 5. 我们可以从Delphi 5应用程序调用.net(2.0)dll
- 6. 从Delphi的DLL回调到C#应用程序
- 7. 在Delphi应用程序中从C++ DLL中回调
- 8. 如何将delphi tframe从dll加载到delphi应用程序
- 9. DELPHI应用程序错误与DLL在一个DLL
- 10. 在Delphi XE2中调用dll的过程
- 11. 从Java应用程序调用C#dll
- 12. 监视DLL的应用程序调用
- 13. 从C#应用程序调用C++ DLL
- 14. 写作Delphi应用程序
- 15. 从Delphi调用C#dll
- 16. 调试Wine上的Delphi应用程序
- 17. PowerBuilder应用程序执行错误R0030
- 18. 从Powerbuilder应用程序调用.Net COM程序集(无需注册)
- 19. Powerbuilder调用C#DLL(RGiesecke DLL导出模板)
- 20. 在Delphi中使用指针调用DLL
- 21. Delphi SoapServer应用程序
- 22. Delphi DLL异常关闭我的应用程序
- 23. 防止Delphi MDI应用程序在外部DLL中创建TApplication
- 24. 将应用程序从Delphi 7移植到Delphi 2007 - dbxint30.dll问题
- 25. 如何将Delphi Win32资源DLL转换为Delphi macOS应用程序?
- 26. 如何从Delphi 2010应用程序中调用MS-DOS批处理程序
- 27. Windows Form DLL应用程序
- 28. 在PowerBuilder应用
- 29. 使用PowerBuilder 10.0调用DLL的外部函数错误
- 30. 从C#代码调用delphi DLL方法
您没有提供足够的信息以便我们帮助您。你如何从PowerBuilder中“调用”Delphi DLL?有没有办法让PB通知DLL它正在退出,以便DLL可以清理线程? –
如果你看看任务管理器,或者更好的SysInternals ProcessExplorer,你会发现你的PB应用程序没有被终止。如果是的话,该DLL不能在内存中。 –
@Chris - OP说PB保留在任务管理器中。无论如何,DLL不会显示在任务管理器中。 –