


Hat jemand versucht, die Python-Bindungen von LibHaru auf Python 3.9 (64-Bit) zu aktualisieren?
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)
Ich bin auf Folgendes gestoßen:
page = HPDF_AddPage (pdf)
**ctypes.ArgumentError:参数 1:<class 'OverflowError'>:int 太长,无法转换**
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
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
definiert als: hpdf_doc
被定义为 hpdf_handle
,它被定义为 ctypes.c_void_p
。这是 64 位操作系统上的 64 位指针。 hpdf_new
和 hpdf_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
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
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!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

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

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen





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.

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 ...

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:

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...

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 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 ...

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

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