我在C++ DLL中嵌入python(所以最終我可以把它放在一個xll中)。當設置錯誤時Py_Initialize被記錄爲最終失敗 - 參見http://docs.python.org/c-api/init.html,「...如果初始化失敗,則它是一個致命錯誤。」如何在Py_initialize失敗時捕獲並處理致命錯誤?
是否有可能發現這個錯誤,以及如何?
思考也許是一個全球性的Windows鉤子?
我在C++ DLL中嵌入python(所以最終我可以把它放在一個xll中)。當設置錯誤時Py_Initialize被記錄爲最終失敗 - 參見http://docs.python.org/c-api/init.html,「...如果初始化失敗,則它是一個致命錯誤。」如何在Py_initialize失敗時捕獲並處理致命錯誤?
是否有可能發現這個錯誤,以及如何?
思考也許是一個全球性的Windows鉤子?
我通過創建一個單獨的可執行文件來嘗試初始化python來解決這個問題。我的主進程將啓動它並檢查退出代碼,如果子進程成功,則只調用PyInitialize。所以,python被初始化了兩次,但它比用戶明顯的崩潰要好。
致電Py_FatalError
會引發致命錯誤,該錯誤與解釋性消息告別,然後致電abort()
。
目前,Jason的解決方案似乎是唯一的方法,但是這並不包括由於在Py_Initialize()
之後的某處發生致命錯誤而導致Python失敗的情況,所以嵌入式應用程序無法在更優雅的方式(顯示GUI消息,然後才中止)。
我創建了一個Python的bug跟蹤系統補丁和問題,交叉引用了這個問題:http://bugs.python.org/issue30560
這不是很好呢?我已經爲SIGABRT,一個退出處理程序和一個退出處理程序添加了一個信號處理程序,但不幸的是沒有一個被觸發。 – DangerMouse