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

  • 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. ;)

  • 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

  • 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

  • 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