亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

問題內容

我正在運行 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::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

分享到:
標簽:overflow
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定