zint编译为dll后,只有两个DLL文件(libpng16.dll和zint.dll),可以在网上搜索。把这两个dll放到VB项目目录下面。
zint 是用c语言实现,网上也有开源代码。VB调用C函数,存在一些转换。本程序在没有实现自定义变量的情况下,
通过修改内存值,来达到生成不同条码目的。
Private Declare Function ZBarcode_Create Lib "zint.dll" () As Long
Private Declare Sub ZBarcode_Delete Lib "zint.dll" (ByVal symbol As Long)
Private Declare Function ZBarcode_Encode_and_Print Lib "zint.dll" (ByRef symbol As Long, ByVal content As String, ByVal Length As Long, ByVal rotate_angle As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
上面为需要用到的zint库函数和VB直接修改内存函数,因为原名中,symbol指针的第一个参数,就是barcode类型数值。所以
在VB里,直接修改该指针地址的前4位,就会得到不同的条码或者二维码。成功后,在项目目录下会生成out.png文件
Private Sub Command1_Click()
'On Error GoTo err1
Dim hd, result As Long
Dim test As String
Dim change As Long
test = "12345679999mmmmmmmmmm000000333333333333eeeeeeeeeppppppppppppwwwf"
hd = ZBarcode_Create
change = hd
CopyMemory ByVal change, 55, 4 ‘55为PDF417编码,后面有各个编码对应不同值
result = ZBarcode_Encode_and_Print(ByVal (hd), test, Len(test), 0)
ZBarcode_Delete (hd)
MsgBox "sucess"
'err1:
' If Err.Number = 49 Then ’在调试时,会有dll函数调用约定错误49,生产exe不会有此错误,原因不知
' If (hd > 0) Then
' ZBarcode_Delete (hd)
' End If
'
' Err.Clear
' End If
End Sub
' /* Tbarcode 7 codes */
'#define BARCODE_CODE11 1
'#define BARCODE_C25MATRIX 2
'#define BARCODE_C25INTER 3
'#define BARCODE_C25IATA 4
'#define BARCODE_C25LOGIC 6
'#define BARCODE_C25IND 7
'#define BARCODE_CODE39 8
'#define BARCODE_EXCODE39 9
'#define BARCODE_EANX 13
'#define BARCODE_EANX_CHK 14
'#define BARCODE_EAN128 16
'#define BARCODE_CODABAR 18
'#define BARCODE_CODE128 20
'#define BARCODE_DPLEIT 21
'#define BARCODE_DPIDENT 22
'#define BARCODE_CODE16K 23
'#define BARCODE_CODE49 24
'#define BARCODE_CODE93 25
'#define BARCODE_FLAT 28
'#define BARCODE_RSS14 29
'#define BARCODE_RSS_LTD 30
'#define BARCODE_RSS_EXP 31
'#define BARCODE_TELEPEN 32
'#define BARCODE_UPCA 34
'#define BARCODE_UPCA_CHK 35
'#define BARCODE_UPCE 37
'#define BARCODE_UPCE_CHK 38
'#define BARCODE_POSTNET 40
'#define BARCODE_MSI_PLESSEY 47
'#define BARCODE_FIM 49
'#define BARCODE_LOGMARS 50
'#define BARCODE_PHARMA 51
'#define BARCODE_PZN 52
'#define BARCODE_PHARMA_TWO 53
'#define BARCODE_PDF417 55
'#define BARCODE_PDF417TRUNC 56
'#define BARCODE_MAXICODE 57
'#define BARCODE_QRCODE 58
'#define BARCODE_CODE128B 60
'#define BARCODE_AUSPOST 63
'#define BARCODE_AUSREPLY 66
'#define BARCODE_AUSROUTE 67
'#define BARCODE_AUSREDIRECT 68
'#define BARCODE_ISBNX 69
'#define BARCODE_RM4SCC 70
'#define BARCODE_DATAMATRIX 71
'#define BARCODE_EAN14 72
'#define BARCODE_VIN 73
'#define BARCODE_CODABLOCKF 74
'#define BARCODE_NVE18 75
'#define BARCODE_JAPANPOST 76
'#define BARCODE_KOREAPOST 77
'#define BARCODE_RSS14STACK 79
'#define BARCODE_RSS14STACK_OMNI 80
'#define BARCODE_RSS_EXPSTACK 81
'#define BARCODE_PLANET 82
'#define BARCODE_MICROPDF417 84
'#define BARCODE_ONECODE 85
'#define BARCODE_PLESSEY 86
'
' /* Tbarcode 8 codes */
'#define BARCODE_TELEPEN_NUM 87
'#define BARCODE_ITF14 89
'#define BARCODE_KIX 90
'#define BARCODE_AZTEC 92
'#define BARCODE_DAFT 93
'#define BARCODE_MICROQR 97
'
' /* Tbarcode 9 codes */
'#define BARCODE_HIBC_128 98
'#define BARCODE_HIBC_39 99
'#define BARCODE_HIBC_DM 102
'#define BARCODE_HIBC_QR 104
'#define BARCODE_HIBC_PDF 106
'#define BARCODE_HIBC_MICPDF 108
'#define BARCODE_HIBC_BLOCKF 110
'#define BARCODE_HIBC_AZTEC 112
'
' /* Tbarcode 10 codes */
'#define BARCODE_DOTCODE 115
'#define BARCODE_HANXIN 116
'
' /*Tbarcode 11 codes*/
'#define BARCODE_MAILMARK 121
'
' /* Zint specific */
'#define BARCODE_AZRUNE 128
'#define BARCODE_CODE32 129
'#define BARCODE_EANX_CC 130
'#define BARCODE_EAN128_CC 131
'#define BARCODE_RSS14_CC 132
'#define BARCODE_RSS_LTD_CC 133
'#define BARCODE_RSS_EXP_CC 134
'#define BARCODE_UPCA_CC 135
'#define BARCODE_UPCE_CC 136
'#define BARCODE_RSS14STACK_CC 137
'#define BARCODE_RSS14_OMNI_CC 138
'#define BARCODE_RSS_EXPSTACK_CC 139
'#define BARCODE_CHANNEL 140
'#define BARCODE_CODEONE 141
'#define BARCODE_GRIDMATRIX 142
'#define BARCODE_UPNQR 143