Heim Backend-Entwicklung Python-Tutorial Hat jemand versucht, die Python-Bindungen von LibHaru auf Python 3.9 (64-Bit) zu aktualisieren?

Hat jemand versucht, die Python-Bindungen von LibHaru auf Python 3.9 (64-Bit) zu aktualisieren?

Feb 09, 2024 am 08:54 AM
overflow

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

Frageninhalt

Ich verwende Python 3.9, 64-Bit, und habe VS 2022 verwendet, um libharu und einige Erweiterungen in eine DLL zu kompilieren, einschließlich libpng. Nach dem Hinzufügen minimaler Codeanpassungen zum Auffinden der VS-Laufzeit-DLL (libhpdf) kann die DLL in Python geladen werden. dll-Abhängigkeit und scheint zu funktionieren (nur 5 .py-Dateien im Paket) Ich habe eine DLL mit aktiviertem PTRACE erstellt, um den Fortschritt zu verfolgen. Mit dieser DLL wurden auch C-Demos dynamisch erstellt, die alle funktionieren und PDFs generieren.

Ich versuche, das in der Bindung enthaltene Python-Demobeispiel arc_demo.py auszuführen Möchten Sie dieselbe PDF-Datei generieren?

Ich kann sagen, dass alles gut funktioniert, bis ich die Zeile aus der Dokumentation hinzufüge:

Ausgabe ähnlich der Ablaufverfolgung, die mit der kompilierten C-Version des Beispiels erhalten wurde. pdf = HPDF_New (error_handler, NULL)

Aber... var „pdf“ ist nicht das, was HP_AddPage() erwartet, denn beim nächsten Aufruf wird die Seite hinzugefügt

Ich bin auf Folgendes gestoßen: page = HPDF_AddPage (pdf)**ctypes.ArgumentError:参数 1:<class 'OverflowError'>:int 太长,无法转换**

Ich denke, das könnte etwas damit zu tun haben, dass die ursprünglichen Bindungen nur mit 32-Bit erstellt und getestet wurden. Ein weiterer Verdächtiger sind portierte Ctypes.

Jetzt ändere ich also die Bindungen, hauptsächlich

hpdf.py. Ich habe derzeit Probleme mit der Kommunikation zwischen Python und DLL und überprüfe, ob ctypes die Dinge wie erwartet verarbeitet. Mit ...kein Glück. Wenn der Aufruf über ref(c_void_p(pdf)) erfolgt, werde ich den Fehler beseitigen, kann aber nicht richtig auf den Inhalt der HPDF_Doc-Struktur zugreifen byref ,将 *pdf * 转换为 c_void_p

Irgendwelche Vorschläge? Könnten Sie vielleicht helfen? Vergleichende Ansätze zum Debuggen von Python mithilfe einer C-basierten DLL?

Danke, Ignacio

PS: Irgendwann werden Kurse für Haru PDF-Interna geschrieben. Dies geschieht jedoch, nachdem ich das Python-Beispiel ohne Fehler ausführen kann.


Richtige Antwort


Aufrufkonvention und Sie müssen die Parametergröße kennen. if/python/hpdf.py中的ctypes接口没有为所有函数定义.argtypes。对于 64 位句柄和指针来说,为每个函数定义正确的参数类型尤其重要。最初的开发人员可能不明白这一点,如从 windll 转换为 cdll 接口所示。 windll 使用 __stdcall

Zum Beispiel ist

definiert als: 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
Nach dem Login kopieren

Kann Typprüfungen durchführen und Parameter von Python-Objekten korrekt in C-Typen marshalieren (konvertieren), zum Beispiel: ctypes 假设传递给 hpdf_addpage 的参数是 c_int 因为 to 没有 argtypes。句柄值是 >32 位,因此出现错误。理想情况下,所有函数都应显式声明其参数类型,以便 ctypes

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
Nach dem Login kopieren

Bitte beachten Sie, dass Parametertypen auf

basieren müssen. ctypes 类型。您必须仔细跟踪参数并为每个函数声明 .argtypes

Das obige ist der detaillierte Inhalt vonHat jemand versucht, die Python-Bindungen von LibHaru auf Python 3.9 (64-Bit) zu aktualisieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Ist die H5-Seitenproduktion eine Front-End-Entwicklung? Ist die H5-Seitenproduktion eine Front-End-Entwicklung? Apr 05, 2025 pm 11:42 PM

Ja, die H5-Seitenproduktion ist eine wichtige Implementierungsmethode für die Front-End-Entwicklung, die Kerntechnologien wie HTML, CSS und JavaScript umfasst. Entwickler bauen dynamische und leistungsstarke H5 -Seiten auf, indem sie diese Technologien geschickt kombinieren, z. B. die Verwendung der & lt; canvas & gt; Tag, um Grafiken zu zeichnen oder JavaScript zu verwenden, um das Interaktionsverhalten zu steuern.

Wie kann man das Größensymbol durch CSS anpassen und es mit der Hintergrundfarbe einheitlich machen? Wie kann man das Größensymbol durch CSS anpassen und es mit der Hintergrundfarbe einheitlich machen? Apr 05, 2025 pm 02:30 PM

Die Methode zur Anpassung der Größe der Größe der Größe der Größe in CSS ist mit Hintergrundfarben einheitlich. In der täglichen Entwicklung begegnen wir häufig Situationen, in denen wir die Details der Benutzeroberfläche wie Anpassung anpassen müssen ...

Der jüngste Preis für Bitcoin in den Jahren 2018-2024 USD Der jüngste Preis für Bitcoin in den Jahren 2018-2024 USD Feb 15, 2025 pm 07:12 PM

Echtzeit-Bitcoin-USD-Preis Faktoren, die den Bitcoin -Preis beeinflussen Indikatoren für die Vorhersage zukünftiger Bitcoin -Preise Hier finden Sie einige wichtige Informationen zum Preis von Bitcoin in den Jahren 2018-2024:

Warum sind die Inline-Block-Elemente falsch ausgerichtet? Wie löst ich dieses Problem? Warum sind die Inline-Block-Elemente falsch ausgerichtet? Wie löst ich dieses Problem? Apr 04, 2025 pm 10:39 PM

In Bezug auf die Gründe und Lösungen für falsch ausgerichtete Darstellung von Inline-Block-Elementen. Beim Schreiben von Webseitenlayout stoßen wir oft auf einige scheinbar seltsame Anzeigenprobleme. Vergleichen...

Wie steuern Sie die obere und das Ende der Seiten in den Browser -Druckeinstellungen über JavaScript oder CSS? Wie steuern Sie die obere und das Ende der Seiten in den Browser -Druckeinstellungen über JavaScript oder CSS? Apr 05, 2025 pm 10:39 PM

So verwenden Sie JavaScript oder CSS, um die obere und das Ende der Seite in den Druckeinstellungen des Browsers zu steuern. In den Druckeinstellungen des Browsers gibt es eine Option, um zu steuern, ob das Display ist ...

Wie verwendet ich das Clip-Pfad-Attribut von CSS, um den 45-Grad-Kurveneffekt des Segmenters zu erreichen? Wie verwendet ich das Clip-Pfad-Attribut von CSS, um den 45-Grad-Kurveneffekt des Segmenters zu erreichen? Apr 04, 2025 pm 11:45 PM

Wie kann man den 45-Grad-Kurveneffekt des Segmenters erreichen? Bei der Implementierung des Segmenters verwandeln Sie den rechten Rand in eine 45-Grad-Kurve, wenn Sie auf die linke Schaltfläche klicken, und der Punkt ...

Wie kann man Segmentierungseffekt mit einer 45 -Grad -Kurvenrandung erreichen? Wie kann man Segmentierungseffekt mit einer 45 -Grad -Kurvenrandung erreichen? Apr 04, 2025 pm 11:48 PM

Tipps zur Implementierung von Segmentierereffekten im Design der Benutzeroberfläche sind Segmentierer ein gemeinsames Navigationselement, insbesondere in mobilen Anwendungen und reaktionsschnellen Webseiten. ...

Der Text unter Flex -Layout wird weggelassen, aber der Behälter wird geöffnet? Wie löst ich es? Der Text unter Flex -Layout wird weggelassen, aber der Behälter wird geöffnet? Wie löst ich es? Apr 05, 2025 pm 11:00 PM

Das Problem der Containeröffnung aufgrund einer übermäßigen Auslassung von Text unter Flex -Layout und Lösungen werden verwendet ...

See all articles