In this tutorial, I’d wish to share the way to wrap C/C++ strategies of Dynamsoft Barcode SDK to make a Barcode extension for Python. Ads high-powered by Dynamsoft Visual Studio Settings for Building Py...
In this tutorial, I’d wish to share the way to wrap C/C++ strategies of Dynamsoft Barcode SDK to make a Barcode extension for Python.
Ads high-powered by Dynamsoft
Visual Studio Settings for Building Python Extensions on Windows
Let’s produce a replacement win32 project named DynamsoftBarcodeReader in Visual Studio.
Open project properties, and embody Python header files and libraries.
Add a dependency python27.lib.
Change the Target Extension to .pyd.
A .pyd file is same as DLL. it's the bridge between Python and C/C++. By default, the build configuration is correct in Visual Studio. If you simply build the project directly, you'll see the subsequent linkage error:
Why? the explanation is that there's no python27_d.lib in any respect in Python’s official unharness package. If you wish to link python27_d.lib, you've got to transfer the ASCII text file and build a correct version yourself. So, switch to unharness and build the project.
Wrapping C/C++ strategies of Dynamsoft Barcode SDK for Python
When you import DynamsoftBarcodeReader in Python script, Python can explore for DynamsoftBarcodeReader.pyd so decision initDynamsoftBarcodeReader() to create associate degree format. kind of like JNI (Java Native Interface), we've got to register the native strategies that area unit accessible to Python.
Let’s add a way for decipherment Barcode file. If you've got learned the JNI sample code, you must be aware of it. the sole distinction is that we'd like to convert final results to Python object kind.
Ads high-powered by Dynamsoft
Visual Studio Settings for Building Python Extensions on Windows
Let’s produce a replacement win32 project named DynamsoftBarcodeReader in Visual Studio.
Open project properties, and embody Python header files and libraries.
Add a dependency python27.lib.
Change the Target Extension to .pyd.
A .pyd file is same as DLL. it's the bridge between Python and C/C++. By default, the build configuration is correct in Visual Studio. If you simply build the project directly, you'll see the subsequent linkage error:
Why? the explanation is that there's no python27_d.lib in any respect in Python’s official unharness package. If you wish to link python27_d.lib, you've got to transfer the ASCII text file and build a correct version yourself. So, switch to unharness and build the project.
Wrapping C/C++ strategies of Dynamsoft Barcode SDK for Python
When you import DynamsoftBarcodeReader in Python script, Python can explore for DynamsoftBarcodeReader.pyd so decision initDynamsoftBarcodeReader() to create associate degree format. kind of like JNI (Java Native Interface), we've got to register the native strategies that area unit accessible to Python.
Let’s add a way for decipherment Barcode file. If you've got learned the JNI sample code, you must be aware of it. the sole distinction is that we'd like to convert final results to Python object kind.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
static PyObject *
decodeFile(PyObject *self, PyObject *args)
{
char *pFileName;
int option_iMaxBarcodesNumPerPage = -1;
int option_llBarcodeFormat = -1;
if (!PyArg_ParseTuple(args, "s", &pFileName)) {
return NULL;
}
pBarcodeResultArray pResults = NULL;
ReaderOptions option;
SetOptions(&option, option_iMaxBarcodesNumPerPage, option_llBarcodeFormat);
int ret = DBR_DecodeFile(
pFileName,
&option,
&pResults
);
if (ret == DBR_OK){
int count = pResults->iBarcodeCount;
pBarcodeResult* ppBarcodes = pResults->ppBarcodes;
pBarcodeResult tmp = NULL;
PyObject* list = PyList_New(count);
PyObject* result = NULL;
for (int i = 0; i < count; i++)
{
tmp = ppBarcodes[i];
result = PyString_FromString(tmp->pBarcodeData);
PyList_SetItem(list, i, Py_BuildValue("iN", (int)tmp->llFormat, result));
}
// release memory
DBR_FreeBarcodeResults(&pResults);
return list;
}
return Py_None;
}
static PyMethodDef methods[] = {
{ "initLicense", initLicense, METH_VARARGS, NULL },
{ "decodeFile", decodeFile, METH_VARARGS, NULL },
{ NULL, NULL }
};
To
automatically copy all relevant DLLs to output directory after building
the project, add the following command line in Visual Studio.
Build the project to generate DynamsoftBarcodeReader.pyd.
Create a Python script under the output directory.
Write a simple Python Barcode program with following code:
Create a Python script under the output directory.
Write a simple Python Barcode program with following code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import os.path
import DynamsoftBarcodeReader
formats = {
0x1FFL : "OneD",
0x1L : "CODE_39",
0x2L : "CODE_128",
0x4L : "CODE_93",
0x8L : "CODABAR",
0x10L : "ITF",
0x20L : "EAN_13",
0x40L : "EAN_8",
0x80L : "UPC_A",
}
def initLicense(license):
DynamsoftBarcodeReader.initLicense(license)
def decodeFile(fileName):
results = DynamsoftBarcodeReader.decodeFile(fileName)
for result in results:
print "barcode format: " + formats[result[0]]
print "barcode value: " + result[1]
if __name__ == "__main__":
barcode_image = input("Enter the barcode file: ");
if not os.path.isfile(barcode_image):
print "It is not a valid file."
else:
decodeFile(barcode_image);
Use the image that provided by Dynamsoft Barcode SDK for a test.
Now it’s your turn to create a fun Python Barcode program with Dynamsoft Barcode SDK.
Source Code
0 Response to " Wrapping C/C++ ways of Dynamsoft Barcode SDK for Python "
Post a Comment