[COLOR=#808080]#include[/color] [COLOR=#A31515]"main.h"[/color]
[COLOR=#808080]#include[/color] [COLOR=#A31515]"stdio.h"[/color]
[COLOR=#0000FF]static[/color] [COLOR=#0000FF]int[/color] cPort = 1;
[COLOR=#0000FF]static[/color] [COLOR=#0000FF]int[/color] bRate = 9600;
[COLOR=#0000FF]static[/color] [COLOR=#0000FF]int[/color] pType = 0;
[COLOR=#0000FF]static[/color] [COLOR=#0000FF]int[/color] dBits = 8;
[COLOR=#0000FF]static[/color] [COLOR=#0000FF]int[/color] sBits = 1;
[COLOR=#008000]// a sample exported function[/color]
[COLOR=#0000FF]void[/color] [COLOR=#6F008A]DLL_EXPORT[/color] SetComPort([COLOR=#0000FF]int[/color] [COLOR=#808080]comPort[/color], [COLOR=#0000FF]int[/color] [COLOR=#808080]baudRate[/color], [COLOR=#0000FF]int[/color] [COLOR=#808080]parityType[/color], [COLOR=#0000FF]int[/color] [COLOR=#808080]dataBits[/color], [COLOR=#0000FF]int[/color] [COLOR=#808080]stopBits[/color])
{
cPort = [COLOR=#808080]comPort[/color];
bRate = [COLOR=#808080]baudRate[/color];
pType = [COLOR=#808080]parityType[/color];
dBits = [COLOR=#808080]dataBits[/color];
sBits = [COLOR=#808080]stopBits[/color];
}
[COLOR=#0000FF]void[/color] [COLOR=#6F008A]DLL_EXPORT[/color] PrintQRCode([COLOR=#0000FF]char[/color]* [COLOR=#808080]data[/color], [COLOR=#0000FF]int[/color] [COLOR=#808080]fandc[/color])
{
[COLOR=#0000FF]char[/color] comFile[32] = [COLOR=#A31515]"\\\\.\\COM"[/color];
[COLOR=#0000FF]char[/color] scratch[10];
sprintf(scratch, [COLOR=#A31515]"%d"[/color], cPort);
strcat(comFile, scratch);
[COLOR=#2B91AF]HANDLE[/color] hComm;
hComm = [COLOR=#6F008A]CreateFile[/color](
comFile,
[COLOR=#6F008A]GENERIC_READ[/color] | [COLOR=#6F008A]GENERIC_WRITE[/color],
0,
0,
[COLOR=#6F008A]OPEN_EXISTING[/color],
[COLOR=#6F008A]FILE_FLAG_OVERLAPPED[/color],
0
);
[COLOR=#2B91AF]DCB[/color] dcb = {0};
[COLOR=#0000FF]if[/color] (GetCommState(hComm, &dcb))
{
dcb.BaudRate = bRate;
dcb.ByteSize = dBits;
[COLOR=#0000FF]switch[/color] (pType)
{
[COLOR=#0000FF]case[/color] 2:
dcb.Parity = [COLOR=#6F008A]EVENPARITY[/color];
[COLOR=#0000FF]break[/color];
[COLOR=#0000FF]case[/color] 1:
dcb.Parity = [COLOR=#6F008A]ODDPARITY[/color];
[COLOR=#0000FF]break[/color];
[COLOR=#0000FF]case[/color] 0:
dcb.Parity = [COLOR=#6F008A]NOPARITY[/color];
[COLOR=#0000FF]break[/color];
[COLOR=#0000FF]default[/color]:
dcb.Parity = [COLOR=#6F008A]NOPARITY[/color];
}
dcb.StopBits = sBits - 1;
}
[COLOR=#2B91AF]OVERLAPPED[/color] osWrite = {0};
[COLOR=#2B91AF]DWORD[/color] dwWritten;
[COLOR=#2B91AF]DWORD[/color] dwRes;
[COLOR=#2B91AF]BOOL[/color] fRes;
[COLOR=#2B91AF]byte[/color] storeQRCode[] = {
0x1D, 0x28, 0x6B, ([COLOR=#2B91AF]byte[/color])(strlen([COLOR=#808080]data[/color]) + 3), 0x00, 0x31, 0x50, 0x30
};
[COLOR=#2B91AF]byte[/color] modSizeCenterPrintCode[] = {
0x1D, 0x28, 0x6B, 0x04, 0x00, 0x31, 0x41, 0x32, 0x00,
0x1D, 0x28, 0x6B, 0x03, 0x00, 0x31, 0x43, 0x07,
0x1b, 0x61, 0x01,
0x1D, 0x28, 0x6B, 0x03, 0x00, 0x31, 0x51, 0x30
};
[COLOR=#2B91AF]byte[/color] feedAndCut[] = { 27, 64, 0xA, 0x1d, 0x56, 66, 30 };
[COLOR=#2B91AF]byte[/color] dataToPrint[ 8 + strlen([COLOR=#808080]data[/color]) + 28 + 7 ];
memcpy(dataToPrint, storeQRCode, 8);
memcpy(dataToPrint + 8, [COLOR=#808080]data[/color], strlen([COLOR=#808080]data[/color]));
memcpy(dataToPrint + 8 + strlen([COLOR=#808080]data[/color]), modSizeCenterPrintCode, 28);
[COLOR=#0000FF]if[/color] ([COLOR=#808080]fandc[/color] == 1)
memcpy(dataToPrint + 8 + strlen([COLOR=#808080]data[/color]) + 28, feedAndCut, 7);
osWrite.hEvent = [COLOR=#6F008A]CreateEvent[/color]([COLOR=#6F008A]NULL[/color], [COLOR=#6F008A]TRUE[/color], [COLOR=#6F008A]FALSE[/color], [COLOR=#6F008A]NULL[/color]);
[COLOR=#0000FF]if[/color] (!WriteFile(hComm, dataToPrint, 8 + strlen([COLOR=#808080]data[/color]) + 28, &dwWritten, &osWrite))
{
[COLOR=#0000FF]if[/color] (GetLastError() != [COLOR=#6F008A]ERROR_IO_PENDING[/color])
{
fRes = [COLOR=#6F008A]FALSE[/color];
}
[COLOR=#0000FF]else[/color]
{
dwRes = WaitForSingleObject(osWrite.hEvent, [COLOR=#6F008A]INFINITE[/color]);
[COLOR=#0000FF]switch[/color] (dwRes)
{
[COLOR=#0000FF]case[/color] [COLOR=#6F008A]WAIT_OBJECT_0[/color]:
[COLOR=#0000FF]if[/color] (!GetOverlappedResult(hComm, &osWrite, &dwWritten, [COLOR=#6F008A]FALSE[/color]))
fRes = [COLOR=#6F008A]FALSE[/color];
[COLOR=#0000FF]else[/color]
fRes = [COLOR=#6F008A]TRUE[/color];
[COLOR=#0000FF]break[/color];
[COLOR=#0000FF]default[/color]:
fRes = [COLOR=#6F008A]FALSE[/color];
[COLOR=#0000FF]break[/color];
}
}
}
[COLOR=#0000FF]else[/color]
fRes = [COLOR=#6F008A]TRUE[/color];
}
[COLOR=#0000FF]extern[/color] [COLOR=#A31515]"C"[/color] [COLOR=#6F008A]DLL_EXPORT[/color] [COLOR=#2B91AF]BOOL[/color] [COLOR=#6F008A]APIENTRY[/color] DllMain([COLOR=#2B91AF]HINSTANCE[/color] [COLOR=#808080]hinstDLL[/color], [COLOR=#2B91AF]DWORD[/color] [COLOR=#808080]fdwReason[/color], [COLOR=#2B91AF]LPVOID[/color] [COLOR=#808080]lpvReserved[/color])
{
[COLOR=#0000FF]switch[/color] ([COLOR=#808080]fdwReason[/color])
{
[COLOR=#0000FF]case[/color] [COLOR=#6F008A]DLL_PROCESS_ATTACH[/color]:
[COLOR=#008000]// attach to process[/color]
[COLOR=#008000]// return FALSE to fail DLL load[/color]
[COLOR=#0000FF]break[/color];
[COLOR=#0000FF]case[/color] [COLOR=#6F008A]DLL_PROCESS_DETACH[/color]:
[COLOR=#008000]// detach from process[/color]
[COLOR=#0000FF]break[/color];
[COLOR=#0000FF]case[/color] [COLOR=#6F008A]DLL_THREAD_ATTACH[/color]:
[COLOR=#008000]// attach to thread[/color]
[COLOR=#0000FF]break[/color];
[COLOR=#0000FF]case[/color] [COLOR=#6F008A]DLL_THREAD_DETACH[/color]:
[COLOR=#008000]// detach from thread[/color]
[COLOR=#0000FF]break[/color];
}
[COLOR=#0000FF]return[/color] [COLOR=#6F008A]TRUE[/color]; [COLOR=#008000]// succesful[/color]
}