


Adakah sesiapa cuba mengemas kini pengikatan Python LibHaru kepada Python 3.9 (64-bit)?
Saya menjalankan Python 3.9, 64-bit, dan telah menggunakan VS 2022 untuk menyusun libharu dan beberapa sambungan ke dalam DLL, termasuk libpng. Selepas menambah pelarasan kod minimum untuk mencari DLL masa jalan VS (libhpdf), DLL boleh dimuatkan ke dalam Python. dll dan nampaknya berfungsi (hanya 5 fail .py dalam berkas) Saya telah membina DLL dengan PTRACE didayakan untuk menjejak kemajuan. Demo C juga telah dibina secara dinamik menggunakan DLL ini dan semuanya berfungsi, menghasilkan PDF.
Saya cuba menjalankan contoh demo python yang disertakan dalam pengikatan, arc_demo.py Ingin menjana fail PDF yang sama
Saya boleh katakan bahawa semuanya berfungsi dengan baik sehingga menambah baris daripada dokumentasi:
pdf = HPDF_New (error_handler, NULL)
Output serupa dengan jejak yang diperoleh menggunakan versi C yang disusun contoh.
Tetapi... var "pdf" bukanlah seperti yang diharapkan oleh HP_AddPage() kerana apabila panggilan seterusnya dikeluarkan, halaman itu ditambahkan
page = HPDF_AddPage (pdf)
Saya terjumpa ini:
**ctypes.ArgumentError:参数 1:<class 'OverflowError'>:int 太长,无法转换**
Saya rasa ini mungkin ada kaitan dengan pengikatan asal yang sedang dibina dan diuji dengan 32-bit sahaja. Satu lagi suspek ialah ported ctypes.
Jadi sekarang saya mengubah suai pengikatan, terutamanya hpdf.py.
Pada masa ini bergelut dengan Python ke interkomunikasi DLL, menyemak bahawa ctypes mengendalikan perkara seperti yang diharapkan. Menggunakan byref
,将 *pdf * 转换为 c_void_p
,... tidak berjaya. Jika panggilan dilakukan melalui ref(c_void_p(pdf)) saya menyingkirkan ralat tetapi tidak dapat mengakses kandungan struktur HPDF_Doc dengan betul
Ada cadangan? Mungkin anda boleh membantu? Pendekatan perbandingan untuk menyahpepijat Python menggunakan DLL berasaskan C?
Terima kasih, Ignacio
PS: Kelas akhirnya akan ditulis untuk dalaman PDF Haru. Tetapi ini berlaku selepas saya dapat menjalankan contoh python tanpa ralat.
Jawapan betul
if/python/hpdf.py
中的ctypes
接口没有为所有函数定义.argtypes
。对于 64 位句柄和指针来说,为每个函数定义正确的参数类型尤其重要。最初的开发人员可能不明白这一点,如从 windll
转换为 cdll
接口所示。 windll
使用 __stdcall
konvensyen panggilan dan perlu tahu saiz parameter.
Sebagai contoh, hpdf_doc
被定义为 hpdf_handle
,它被定义为 ctypes.c_void_p
。这是 64 位操作系统上的 64 位指针。 hpdf_new
和 hpdf_addpage
ditakrifkan sebagai:
#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
Boleh melakukan semakan taip dan marshal (menukar) parameter dengan betul daripada objek python kepada jenis c, contohnya:
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
Sila ambil perhatian bahawa jenis parameter mestilah berdasarkan ctypes
类型。您必须仔细跟踪参数并为每个函数声明 .argtypes
.
Atas ialah kandungan terperinci Adakah sesiapa cuba mengemas kini pengikatan Python LibHaru kepada Python 3.9 (64-bit)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas





Ya, pengeluaran halaman H5 adalah kaedah pelaksanaan penting untuk pembangunan front-end, yang melibatkan teknologi teras seperti HTML, CSS dan JavaScript. Pemaju membina halaman H5 yang dinamik dan berkuasa dengan bijak menggabungkan teknologi ini, seperti menggunakan & lt; kanvas & gt; Tag untuk menarik grafik atau menggunakan JavaScript untuk mengawal tingkah laku interaksi.

Kaedah penyesuaian simbol saiz semula dalam CSS bersatu dengan warna latar belakang. Dalam perkembangan harian, kita sering menghadapi situasi di mana kita perlu menyesuaikan butiran antara muka pengguna, seperti menyesuaikan ...

Harga USD Bitcoin masa nyata Faktor yang menjejaskan harga bitcoin Petunjuk untuk meramalkan harga bitcoin masa depan Berikut adalah beberapa maklumat penting mengenai harga Bitcoin pada 2018-2024:

Mengenai sebab-sebab dan penyelesaian untuk memaparkan unsur-unsur blok sebaris. Apabila menulis susun atur laman web, kami sering menghadapi masalah paparan yang kelihatan aneh. Bandingkan ...

Cara menggunakan JavaScript atau CSS untuk mengawal bahagian atas dan akhir halaman dalam tetapan percetakan penyemak imbas. Dalam tetapan percetakan penyemak imbas, ada pilihan untuk mengawal sama ada paparan ...

Bagaimana untuk mencapai kesan lengkung 45 darjah segmen? Dalam proses melaksanakan segmen, bagaimana membuat sempadan yang betul berubah menjadi lengkung 45 darjah ketika mengklik butang kiri, dan titik ...

Petua untuk melaksanakan kesan segmen dalam reka bentuk antara muka pengguna, Segmenter adalah elemen navigasi biasa, terutamanya dalam aplikasi mudah alih dan laman web responsif. …

Masalah pembukaan kontena kerana peninggalan teks yang berlebihan di bawah susun atur flex dan penyelesaian digunakan ...
