Hilfestellung bei DllCall der zint.dll

  • Hallo Community,

    ich brauche mal eure Hilfe.

    Ich möchte mittels der zint.dll (hier im download unter /tcl zu finden)

    einen Data Matrix BarCode erstellen. Leider bin ich nicht so sehr mit der Erstellung einer Struct vertraut um die dll "korrekt" anzuschießen.

    Im pdf Manual ab Seite 31 wird die Nutzung der API erläutzert. Wenn mir jemand grob einen Schubs geben könnte, dann kann ich mir den Rest selbst erarbeiten ^^

    Vielen Dank im voraus

    Euer Schnuffel

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Im pdf Manual ab Seite 31 wird die Nutzung der API erläutzert.

    Das Manual ist sowas von inkomplett. Keine Angaben zu den verwendeten Strukturen.

    Ich habe mal gesucht, du brauchst die zint.h - findest du hier: https://github.com/samlown/zint/blob/master/backend/zint.h

    Damit solltest du anfangen können.

    Wenn du jetzt ein konkretes Bsp. hast, das du umsetzen möchtest, helfe ich gern.

    EDIT: Ich habe mal die Struct-Definitionen zu AutoIt übertragen. Ob es zu 100% passt, wird sich erst bei der Anwendung zeigen. ;)

  • danke dir schonmal,

    ich werde testen und melden ;)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • ch werde testen und melden

    Hier mal ein Muster zum Befüllen der ersten Struct, wobei ich mir nicht genau sicher bin, wofür fsize und width stehen.

    AutoIt
    ; TEST-Struct
    Global $sText = "Das ist ein Test!"
    Global $tText = DllStructCreate('char text[' & StringLen($sText) & ']')
    $tText.text = $sText
    Global $tZINT_RENDER_STRING = DllStructCreate($tagZINT_RENDER_STRING)
    $tZINT_RENDER_STRING.x = 100
    $tZINT_RENDER_STRING.y = 50
    $tZINT_RENDER_STRING.fsize = 200
    $tZINT_RENDER_STRING.length = StringLen($sText)
    $tZINT_RENDER_STRING.text = DllStructGetPtr($tText)
  • hast du noch einen Tip wie ich mit der Struct dann die dll anschieße?

    du warst einfach schneller ;)

    ich werde das testen

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • leider komme ich so gar nicht weiter :(

    ich frage mal konkreter ...

    ich möchte mit der zint.dll einen DataMatrix Barcode als bmp speichern.

    BugFix war schon so freundlich und hat die zint.h "übersetzt" um eine Struct zu erstellen.

    Leider komme ich mit den bisherigen Versuchen nicht wirklich weiter.

    beim Aufruf von:

    AutoIt
    Local $aCall = DllCall(@ScriptDir & "\zint.dll", "LONG", "ZBarcode_Encode")
    ConsoleWrite(@error & @CRLF)
    _ArrayDisplay($aCall)

    kommt kein Fehler (@error = 0) und ein Array.

    Natürlich wird die Funktion noch ohne jegliche Parameter angeschoßen.

    Aber weiter schaffe ich es nicht.

    Ich vermute, dass man die Funktion mit mind. einer Struct bedienen muss in der die Angaben für das "Symbol" enthalten sind wie Barcode-Typ, Text, Größe, Farbe usw.

    Dependency Walker gibt mir auch nur die Funktionen :

    Wenn mir jemand sagen kann, was er braucht um mir zu helfen, dann versuche ich alles um diese Informationen ran zu schaffen.

    Ach ja, hier die Exit Codes aus dem Manual:

    EXIT STATUS

    0

    Success (including when given informational options -h, --help, -e, --ecinos, -t, --types, -v, --

    version).

    2

    Invalid option given but overridden by Zint (ZINT_WARN_INVALID_OPTION)

    3

    Automatic ECI inserted by Zint (ZINT_WARN_USES_ECI)

    4

    Symbol created not compliant with standards (ZINT_WARN_NONCOMPLIANT)

    5

    Input data wrong length (ZINT_ERROR_TOO_LONG)

    6

    Input data incorrect (ZINT_ERROR_INVALID_DATA)

    7

    Input check digit incorrect (ZINT_ERROR_INVALID_CHECK)

    8

    Incorrect option given (ZINT_ERROR_INVALID_OPTION)

    9

    Internal error (should not happen) (ZINT_ERROR_ENCODING_PROBLEM)

    10

    Error opening output file (ZINT_ERROR_FILE_ACCESS)

    11

    Memory allocation (malloc) failure (ZINT_ERROR_MEMORY)

    12

    Error writing to output file (ZINT_ERROR_FILE_WRITE)

    13

    Error counterpart of warning if --werror given (ZINT_ERROR_USES_ECI)

    14

    Error counterpart of warning if --werror given (ZINT_ERROR_NONCOMPLIANT)

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • ich möchte mit der zint.dll einen DataMatrix Barcode als bmp speichern.

    Ich habe mir mal einige c files reingezogen. Ich weiß nicht, ob es sehr sinnvoll ist, das über die DLL anzusprechen.

    Unabhängig davon, dass ich noch (mindstens) 1 Fehler in meiner Structumsetzung gefunden habe, ist es ziemlich intensiv die Strukturen mit Daten zu befüllen.

    So, wie ich das bisher verstehe, muss man so vorgehen.

    1. Structs: ZINT_RENDER_LINE, ZINT_RENDER_STRING, ZINT_RENDER_RING, ZINT_RENDER_HEXAGON erstellen und mit Daten füllen

    2. Struct ZINT_RENDER erstellen mit Daten - u.A. Pointer auf die 4 vorigen Strukturen - befüllen

    3. Jetzt wird die zentrale Struktur ZINT_SYMBOL erstellt und auch darin die vorab befüllte Struct ZINT_RENDER als Pointer eingefügt. Dann werden eine Unzahl an weiteren möglichen Parametern gesetzt, die auch regeln, welche Art von Barcode generiert wird.

    Mit dieser zentralen Struktur kann dann die DLL aufgerufen werde.

    Soweit die Theorie. Auf Seite 34-35 im Manual sind die Strukturparameter (etwas) näher erklärt. (Da ist übrigens ein Schreibfehler: Der Parameter "encoded_data" wird dort als "encoding_data" bezeichnet.)

    Wie und welche Daten man in das Array encoding_data steckt... nur Fragezeichen.

    Ich würde überlegen, einfach mit der zint.exe zu Arbeiten. Diese ist CLI-fähig und soweit ich das im Manual sehe, ist das leichter zu handeln als der DLL-Zugriff.

    EDIT: Gerade CLI ausprobiert - Das ist wirklich easy! Kann ich nur empfehlen.

    zint -b QRCODE --border=1 --box -d "Gerade CLI ausprobiert - Das ist wirklich easy!" --quietzones

    zint -o matrix.bmp -b DATAMATRIX --whitesp=1 --vwhitesp=1 -d "Das ist ein Test mit Datamatrix"

    matrix.bmp

  • Hallo Bugfix,

    danke für deine Mühen. Ich habe mich jetzt auch zur Nutzung der CLI entschieden.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • Hallo!

    Auch wenn das Thema schon älter ist. Die Zeile zint -b QRCODE --border=1 --box -d "Gerade CLI ausprobiert - Das ist wirklich easy!" --quietzones kann so natürlich nicht genutzt werden. Wie führt man die Zeile in AutoIt aus? Mit "Run" geht das nicht. (In "cmd" getestet, da läuft es natürlich). Danke!

    Gruß, René

  • AutoIt
    $zint_path = "C:\Programming\addons\zint_barcode\zint-2.12.0"
    $zint_exe = $zint_path & "\zint.exe"
    $cmd = $zint_exe & ' -b QRCODE --border=1 --box -d "Gerade CLI ausprobiert - Das ist wirklich easy!" --quietzones'
    Run($cmd, $zint_path, @SW_HIDE)
    
    ; Ergebnis ist automatisch "out.png" im WorkingDir
    ; oder: gezielte Ausgabe mit ' -o "\out\path\filename.ext"'
  • Danke! Daumen hoch. Man kann aber auch einen Dateinamen vorgeben. ;)

    Code
    $zint_path = @ScriptDir & "\zint"
    $zint_exe = $zint_path & "\zint.exe"
    $cmd = $zint_exe & ' -o test4.png -b AZTEC --scale=3 --border=1 --box -d "Hier steht Text" --quietzones'
    Run($cmd, $zint_path, @SW_HIDE)
  • Hatte ich noch angefügt

    Da hatte ich die Seite noch nicht aktualisiert. Genügt die zint.exe, kann man den Rest aus dem Archiv löschen? Es funktioniert zwar ohne die dll und die andere Anwendung, aber sicher bin ich mir nicht.

    Auf jeden Fall ist zint etwas Feines, die kann jede Menge Barcodes erstellen, und noch dazu kostenlos. Auf diesen Thread bin ich auch nur zufällig gestoßen, nach "mühevoller Google-Suche". ;)