Hallo,
mit dem Benutzen von API und Dll- Funktionen bin ich leider nicht ganz fit und hoffe Ihr könnt mir etwas auf die Sprünge helfen.
Für die Erstellung von Barcode möchte ich die openbarcodes.dll nutzen, meine Barcodes können bis 15 Zeichen lang sein. Das Erstellen von Code39-Barcodes funktioniert, da aber auch Leerzeichen enthalten sein können, ist das nicht meine erste Wahl. Beim Erstellen von Code128-Barcodes meldet aber die DLL das der Ausgabepuffer zu klein ist, egal wie groß ich den dimensioniere. Ich denke ich habe irgendwo einen Denkfehler, aber wie gesagt ich bin auf dem Gebiet neu.
Die readme habe ich mal angefügt:
Code
*** OPENBARCODES DLL ***
// V 1.0.0
// Copyright (C) 2006 (Grandzebu)
// Cette bibliothèque est libre, vous pouvez la redistribuer et/ou la modifier
// selon les termes de la Licence Publique Générale Amoindrie GNU (GNU LGPL)
// Veuillez charger une copie de la license à l'adresse : http://www.gnu.org/licenses/lgpl.html
// Une traduction non officielle se trouve à l'adresse : http://www.linux-france.org/article/these/licence/lgpl/lgpl_monoblock.html
// This library is free, you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public License (GNU LGPL)
// Please download a license copy at : http://www.gnu.org/licenses/lgpl.html
*** Functions définitions for Visual Basic / Définitions des fonctions pour Visual Basic ***
Private Declare Function Code39 Lib "openbarcodes" (ByVal BufIn As String, ByVal SizeIn As Long, ByVal BufOut As String) As Long
Private Declare Function Ean13 Lib "openbarcodes" (ByVal BufIn As String, ByVal BufOut As String) As Long
Private Declare Function AddOn Lib "openbarcodes" (ByVal BufIn As String, ByVal SizeIn As Long, ByVal BufOut As String) As Long
Private Declare Function Ean8 Lib "openbarcodes" (ByVal BufIn As String, ByVal BufOut As String) As Long
Private Declare Function Code25I Lib "openbarcodes" (ByVal BufIn As String, ByVal SizeIn As Long, ByVal Key As Boolean, ByVal BufOut As String) As Long
Private Declare Function Code128 Lib "openbarcodes" (ByVal BufIn As String, ByVal SizeIn As Long, ByRef SizeOut As Long, ByVal BufOut As String) As Long
*** Functions définitions for C / Définitions des fonctions pour C ***
DWORD Code39(LPCTSTR BufIn, DWORD SizeIn, LPTSTR BufOut);
DWORD Ean13(LPCTSTR BufIn, LPTSTR BufOut);
DWORD AddOn(LPCTSTR BufIn, DWORD SizeIn, LPTSTR BufOut);
DWORD Ean8(LPCTSTR BufIn, LPTSTR BufOut);
DWORD Code25I(LPCTSTR BufIn, DWORD SizeIn, BOOL Key, LPTSTR BufOut);
DWORD Code128(LPCTSTR BufIn, DWORD SizeIn, LPWORD SizeOut, LPTSTR BufOut);
*** Parameters / Paramètres ***
BufIn : Pointer to a string to convert / Pointeur sur une chaine à convertir
SizeIn : Length of the BufIn string / Longueur de la chaine BufIn
BufOut : Pointer to the result string / Pointeur sur la chaine résultat
Key : Add a checksum if true / Ajoute une somme de contrôle si vrai
SizeOut : Pointer to the length of the result string / Pointeur sur la longueur de la chaine résultat
*** Return values / Valeur de retour ***
-1 : Buffer for output string too small - Give to the buffer the size SizeOut and call again the function / Tampon pour la chaine de sortie trop petit - Donner au tampon la taille SizeOut et rappeler la fonction
0 : No error / Pas d'erreur
1 : Input string not allowed / Chaine d'entrée non permise
Alles anzeigen
mein script geht in kürze so:
Code
Var bc_in$ ="Eingabe"
Var bc_out$ =""
Var bc_s_in% =Len(bc_in$)
Var bc_s_out% =0
Var erfolg% =0
Declare bereich1#, bereich2#
Dim bereich1#,4
Dim bereich2#,400
Def @bauCode39(3) !"openbarcodes.dll","Code39" // DWORD Code39(LPCTSTR BufIn, DWORD SizeIn, LPTSTR BufOut);
Def @bauCode128(4) !"openbarcodes.dll","Code128" // DWORD Code128(LPCTSTR BufIn, DWORD SizeIn, LPWORD SizeOut, LPTSTR BufOut);
erfolg%=@bauCode39(@Addr(bc_in$),bc_s_in%,bereich2#)
// läuft ohne Probleme
erfolg%=@bauCode128(@Addr(bc_in$),bc_s_in%,bereich1#,bereich2#)
// sagt das der Buffer zu klein ist
Dispose bereich1#
Dispose bereich2#
Alles anzeigen