我使用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. PowerBuilder應用程序 - 調試
- 2. 從DLL調用應用程序創建的Delphi DLL
- 3. 從PowerBuilder調用C#DLL
- 4. 運行PowerBuilder應用程序
- 5. Delphi應用程序調用cobol應用程序 - >錯誤
- 6. 從Delphi應用程序註冊Activex DLL
- 7. 在Delphi應用程序中調用C++ DLL
- 8. 我們可以從Delphi 5應用程序調用.net(2.0)dll
- 9. 從C#.NET應用程序調用Delphi DLL
- 10. 從Delphi的DLL回調到C#應用程序
- 11. 在Delphi應用程序中從C++ DLL中回調
- 12. 如何將delphi tframe從dll加載到delphi應用程序
- 13. 調用dll - 使用delphi的pcshll32.dll
- 14. DELPHI應用程序錯誤與DLL在一個DLL
- 15. 在Delphi XE2中調用dll的過程
- 16. 監視DLL的應用程序調用
- 17. 從Java應用程序調用C#dll
- 18. 從C#應用程序調用C++ DLL
- 19. 寫作Delphi應用程序
- 20. 從C#應用程序調用Delphi函數時調用PInvokeStackImbalance
- 21. 從Visual C++調用delphi dll
- 22. 從Delphi調用C#dll
- 23. 調試Wine上的Delphi應用程序
- 24. 調用MeasureItem程序(TMenuItem,Delphi)
- 25. 嘗試從VS2013調用DELPHI XE2 DLL錯誤C#程序
- 26. PowerBuilder上的Android應用程序開發
- 27. PowerBuilder應用程序執行錯誤R0030
- 28. 從Powerbuilder應用程序調用.Net COM程序集(無需註冊)
- 29. Powerbuilder調用C#DLL(RGiesecke DLL導出模板)
- 30. 在Delphi中使用指針調用DLL
您沒有提供足夠的信息以便我們幫助您。你如何從PowerBuilder中「調用」Delphi DLL?有沒有辦法讓PB通知DLL它正在退出,以便DLL可以清理線程? –
如果你看看任務管理器,或者更好的SysInternals ProcessExplorer,你會發現你的PB應用程序沒有被終止。如果是的話,該DLL不能在內存中。 –
@Chris - OP說PB保留在任務管理器中。無論如何,DLL不會顯示在任務管理器中。 –