Do you apprehend that programing language is presently ranking 1st on
GitHub? it's JavaScript! JavaScript isn't solely used for HTML5 internet application development, however additionally for server-side
programming...
Do you apprehend that programing language is presently ranking 1st on GitHub? it's JavaScript! JavaScript isn't solely used for HTML5 internet application development, however additionally for server-side programming with runtime atmosphere Node.js. With npm, the package manager for Node.js, it's very easy to put in any internet frameworks or utilities. though Node.js has provided several powerful JavaScript genus Apis, generally we've got to form add-ons to empower Node.js with further functionalities. during this tutorial, I’d wish to share a way to implement a JavaScript Barcode application with the custom addon, wrapped with C/C++ genus Apis of Dynamsoft Barcode SDK, for Node.js.
Setting Up Environment for Node.js Addon Development
To build add-ons for Node.js, we need to install the tool node-gyp:
1
npm install -g node-gyp
Create an empty C/C++ file dbr.cc and a configuration file binding.gyp. Specify add-on name and C/C++ source files:
1
2
3
4
5
6
7
8
{
"targets": [
{
"target_name": "dbr",
"sources": [ "dbr.cc" ]
}
]
}
Build dbr.node with the following command:
1
node-gyp configure install
Under folder build, you will see Visual Studio files and dbr.node:
1
2
3
4
5
6
7
8
9
build
/ binding.sln
/ dbr.vcxproj
/ dbr.vcxproj.filters
/ config.gypi
/ Release
/ dbr.node
/ dbr.pdb
/ obj
For more information, please read the basic tutorial of Node.js addons.
Wrapping Dynamsoft Barcode SDK as the Addon for Node.js
Let’s double-click binding.sln to import the project to Visual
Studio. Since node-gyp has added Node.js-relevant configurations, you
just need to insert the directories of Dynamsoft Barcode SDK header
files and libraries. Besides, add the post-build event:
1
copy "{installation directory}DynamsoftBarcode Reader 2.0 TrialRedistC_C++*.dll" "$(OutDir)"
Register a native method, and export the initialization function:
1
2
3
4
5
void Init(Handle exports) {
NODE_SET_METHOD(exports, "decodeFile", DecodeFile);
}
NODE_MODULE(dbr, Init)
Convert barcode results to readable data for V8 JavaScript engine:
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
51
52
53
void DecodeFile(const FunctionCallbackInfo& args) {
Isolate* isolate = Isolate::GetCurrent();
HandleScope scope(isolate);
// convert v8 string to char *
String::Utf8Value utfStr(args[0]->ToString());
char *pFileName = *utfStr;
int option_iMaxBarcodesNumPerPage = -1;
int option_llBarcodeFormat = -1;
pBarcodeResultArray pResults = NULL;
ReaderOptions option;
SetOptions(&option, option_iMaxBarcodesNumPerPage, option_llBarcodeFormat);
// decode barcode image file
int ret = DBR_DecodeFile(
pFileName,
&option,
&pResults
);
if (ret == DBR_OK){
int count = pResults->iBarcodeCount;
pBarcodeResult* ppBarcodes = pResults->ppBarcodes;
pBarcodeResult tmp = NULL;
// javascript callback function
Local cb = Local::Cast(args[1]);
const unsigned argc = 1;
// array for storing barcode results
Local barcodeResults = Array::New(isolate);
for (int i = 0; i Set(String::NewFromUtf8(isolate, "format"), Number::New(isolate, tmp->llFormat));
result->Set(String::NewFromUtf8(isolate, "value"), String::NewFromUtf8(isolate, tmp->pBarcodeData));
barcodeResults->Set(Number::New(isolate, i), result);
}
// release memory
DBR_FreeBarcodeResults(&pResults);
Local argv[argc] = { barcodeResults };
cb->Call(isolate->GetCurrentContext()->Global(), argc, argv);
}
}
Create a JavaScript file for test:
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
var dbr = require('./build/Release/dbr');
var readline = require('readline');
var rl = readline.createInterface({
input: process.stdin,
output: process.stdout
});
rl.question("Please input a barcode image path: ", function(answer) {
// e.g. F:gitDynamsoft-Barcode-ReaderImagesAllSupportedBarcodeTypes.tif
dbr.decodeFile(
answer,
function(msg){
var result = null;
for (index in msg) {
result = msg[index]
console.log(result['format']);
console.log(result['value']);
console.log("##################");
}
}
);
rl.close();
});
Source Code
0 Response to " Making Dynamsoft Barcode SDK an Addon for Node.js "
Post a Comment