有人嘗試將 LibHaru 的 Python 綁定更新為 Python 3.9(64 位元)嗎?

WBOY
發布: 2024-02-09 08:54:27
轉載
670 人瀏覽過

有人尝试将 LibHaru 的 Python 绑定更新为 Python 3.9(64 位)吗?

問題內容

我正在執行 Python 3.9,64 位,並已使用 VS 2022 將 libharu 和一些擴充功能編譯到 DLL 中,包括 libpng。在新增最少的程式碼調整以查找 VS 執行時間 DLL(libhpdf)後,DLL 可以載入到 Python 中。 dll 依賴,似乎可以工作(綁定中只有 5 個 .py 檔案) 我已經建立了啟用 PTRACE 的 DLL,以追蹤進度。還使用該 DLL 動態建立了 C 演示,它們都可以工作,生成 PDF。

我正在嘗試運行綁定中包含的 python 演示範例,arc_demo.py 希望產生相同的 PDF 檔案

我可以說一切正常,直到新增文件的行: pdf = HPDF_New (error_handler, NULL) 與使用範例的編譯 C 版本獲得的追蹤類似的輸出。

但是... var“pdf”不是 HP_AddPage() 所期望的,因為在發出下一個呼叫時,要新增頁面 page = HPDF_AddPage (pdf) 我遇到了這個: **ctypes.ArgumentError:參數 1:<class 'OverflowError'>:int 太長,無法轉換**

#我認為這可能與原始綁定僅使用 32 位元建置和測試有關。另一個嫌疑點是移植的 ctypes。

所以現在我正在修改綁定,主要是hpdf.py。 目前,正在與 Python 到 DLL 的相互通信進行鬥爭,檢查 ctypes 是否按預期處理事情。使用 byref ,將 *pdf * 轉換為 c_void_p,...沒有運氣。如果呼叫是透過 ref(c_void_p(pdf)) 完成的,我會消除錯誤,但無法正確存取 HPDF_Doc 結構的內容

有什麼建議嗎?你可能會提供協助嗎?使用基於 C 的 DLL 調試 Python 的對比方法?

謝謝, 伊格納西奧

PS:最終將為 Haru PDF 內部結構編寫類別。但這會在我能夠無錯誤地運行 python 範例之後發生。


正確答案


if/python/hpdf.py中的ctypes介面沒有為所有函數定義.argtypes。對於 64 位元句柄和指標來說,為每個函數定義正確的參數類型尤其重要。最初的開發人員可能不明白這一點,如從 windll 轉換為 cdll 介面所示。 windll 使用 __stdcall 呼叫約定並需要知道參數大小。

例如,hpdf_doc 被定義為 hpdf_handle,它被定義為 ctypes.c_void_p。這是 64 位元作業系統上的 64 位元指標。 hpdf_newhpdf_addpage 定義為:

#hpdf_doc hpdf_new (hpdf_error_handler user_error_fn, void *user_data)
hpdf_new=haru.hpdf_new
hpdf_new.restype=hpdf_doc

#hpdf_page hpdf_addpage (hpdf_doc pdf)
hpdf_addpage=haru.hpdf_addpage
hpdf_addpage.restype=hpdf_page
登入後複製

ctypes 假設傳給 hpdf_addpage 的參數是 c_int 因為 to 沒有 argtypes。句柄值是 >32 位,因此出現錯誤。理想情況下,所有函數都應明確聲明其參數類型,以便 ctypes 可以進行類型檢查並正確地將參數從 python 物件編組(轉換)為 c 類型,例如:

HPDF_AddPage.argtypes = HPDF_Doc,  # must be a list or tuple...comma makes this a 1-tuple.
HPDF_New.argtypes = HPDF_Error_Handler, c_void_p
登入後複製

請注意,參數類型必須基於 ctypes 類型。您必須仔細追蹤參數並為每個函數聲明 .argtypes

以上是有人嘗試將 LibHaru 的 Python 綁定更新為 Python 3.9(64 位元)嗎?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板