📄 newdll.cpp
字号:
// newdll.cpp : Defines the entry point for the DLL application.
// commdll.dll 动态连接库
#include "stdafx.h"
#include <time.h>
#include "newdll.h"
BOOL APIENTRY DllMain( HANDLE hModule,
DWORD ul_reason_for_call,
LPVOID lpReserved
)
{
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
break;
}
return TRUE;
}
DLLAPI HANDLE OpenComm(int port,int BaudRate,int ByteSize,int stop)
{
int ret;
if(IsOpen())
CloseComm();
COMMTIMEOUTS Timeouts;
if(port==1)
pComm = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
else if(port==2)
pComm = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
else if(port==3)
pComm = CreateFile("COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
else
return (void *)(-1);
if(pComm==INVALID_HANDLE_VALUE)
return (void *)(-1);
if(!SetCommMask(pComm,EV_RXFLAG))
return (void *)(-1);
if(!SetupComm(pComm,1024,1024))
return (void *)(-1);
DCB dcb;
GetCommState(pComm,&dcb);
dcb.BaudRate = BaudRate;
dcb.Parity = NOPARITY;
dcb.ByteSize = ByteSize;
dcb.StopBits = ONESTOPBIT;
dcb.fDsrSensitivity = FALSE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
dcb.DCBlength = sizeof( DCB );
if(!SetCommState(pComm,&dcb))
return (void *)(-1);
Timeouts.ReadIntervalTimeout=50;
Timeouts.ReadTotalTimeoutConstant=500;
Timeouts.ReadTotalTimeoutMultiplier=50;
Timeouts.WriteTotalTimeoutConstant=500;
Timeouts.WriteTotalTimeoutMultiplier=50;
SetCommTimeouts(pComm,&Timeouts);
return pComm;
}
DLLAPI HANDLE OpenPort(int port)
{
if( CheckDate() < 0 )
return 0;
int ret;
if(IsOpen())
CloseComm();
COMMTIMEOUTS Timeouts;
if(port==1)
pComm = CreateFile("COM1", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
else if(port==2)
pComm = CreateFile("COM2", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
else if(port==3)
pComm = CreateFile("COM3", GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED, NULL);
else
return (void *)(-1);
if(pComm==INVALID_HANDLE_VALUE)
return (void *)(-1);
if(!SetCommMask(pComm,EV_RXFLAG))
return (void *)(-1);
if(!SetupComm(pComm,1024,1024))
return (void *)(-1);
DCB dcb;
GetCommState(pComm,&dcb);
dcb.BaudRate = 9600;
dcb.Parity = NOPARITY;
dcb.ByteSize = 8;
dcb.StopBits = ONESTOPBIT;
dcb.fDsrSensitivity = FALSE;
dcb.fOutxCtsFlow = FALSE;
dcb.fOutxDsrFlow = FALSE;
dcb.fOutX = FALSE;
dcb.fInX = FALSE;
dcb.fBinary = TRUE;
dcb.fParity = FALSE;
dcb.DCBlength = sizeof( DCB );
if(!SetCommState(pComm,&dcb))
return (void *)(-1);
Timeouts.ReadIntervalTimeout=50;
Timeouts.ReadTotalTimeoutConstant=500;
Timeouts.ReadTotalTimeoutMultiplier=50;
Timeouts.WriteTotalTimeoutConstant=500;
Timeouts.WriteTotalTimeoutMultiplier=50;
SetCommTimeouts(pComm,&Timeouts);
return pComm;
}
DLLAPI int CloseComm()
{
if(IsOpen())
{
CloseHandle(pComm);
pComm = INVALID_HANDLE_VALUE;
bOverlapped = FALSE;
}
return 0;
}
DLLAPI int ReadComm(uchar *buffer,uint dwCount)
{
if( CheckDate() < 0 )
return 0;
unsigned char buff[30];
if(!IsOpen())
return -1;
DWORD dwBytesRead = 0;
bool bSuccess = 1;
bSuccess = ReadFile(pComm,buff,dwCount,&dwBytesRead,&overlapped);
if (!bSuccess)
{
if (GetLastError() != ERROR_IO_PENDING)
{
WaitForSingleObject(overlapped.hEvent,1000);
return ((int)dwBytesRead);
}
return 0;
}
return (int)dwBytesRead;
}
DLLAPI int WriteComm(uchar *buffer,uint dwCount)
{
if( CheckDate() < 0 )
return 0;
if(!IsOpen())
return -1;
DWORD dwBytesWrite = 0;
memset(&overlapped, 0, sizeof(OVERLAPPED));
overlapped.hEvent = ::CreateEvent(NULL, TRUE, FALSE,NULL);
bool bSuccess = 1;
bSuccess = WriteFile(pComm,buffer,dwCount,&dwBytesWrite,&overlapped);
if (!bSuccess)
{
if (GetLastError() != ERROR_IO_PENDING)
{
WaitForSingleObject(overlapped.hEvent,1000);
return ((int)dwBytesWrite);
}
return 0;
}
return (int)dwBytesWrite;
}
DLLAPI int WriteDataCode(uchar *buffer,uint dwCount)
{
if( CheckDate() < 0 )
return 0;
uchar buf[64];
int i,t;
if(!IsOpen())
return -1;
memcpy(buf,buffer,dwCount);
for(i=0,t=0;i<dwCount;i++)
t=t+buf[i];
buf[i]=t;
DWORD dwBytesWrite = 0;
memset(&overlapped, 0, sizeof(OVERLAPPED));
overlapped.hEvent = ::CreateEvent(NULL, TRUE, FALSE,NULL);
bool bSuccess = 1;
bSuccess = WriteFile(pComm,buffer,dwCount+1,&dwBytesWrite,&overlapped);
if (!bSuccess)
{
if (GetLastError() != ERROR_IO_PENDING)
{
WaitForSingleObject(overlapped.hEvent,1000);
return ((int)dwBytesWrite);
}
return 0;
}
return (int)dwBytesWrite;
}
DLLAPI int ConvertHexChar(char ch)
{
if((ch>='0')&&(ch<='9'))
return ch-0x30;
else if((ch>='A')&&(ch<='Z'))
return ch-'A'+10;
else if((ch>='a')&&(ch<='z'))
return ch-'a'+10;
else return -1;
}
DLLAPI uchar String2Hex(char *str, unsigned char *senddata,int len)
{
int hexdata,lowhexdata;
uchar hexdatalen=0;
char lstr,hstr,str1[30];
uchar hex[64];
for(int i=0;i<len*2;)
{
hstr=str[i];
i++;
lstr=str[i];
hexdata=ConvertHexChar(hstr);
lowhexdata=ConvertHexChar(lstr);
if((hexdata==16)||(lowhexdata==16))
break;
else
hexdata=hexdata*16+lowhexdata;
i++;
hex[hexdatalen]=(uchar)hexdata;
hexdatalen++;
}
memcpy(senddata,hex,hexdatalen);
return hexdatalen;
}
DLLAPI bool IsDigit(uchar pCh)
{
if(pCh>='0' && pCh<='9')
return true;
else if(pCh='.')
return true;
else
return false;
}
DLLAPI int IsOpen()
{
return pComm != INVALID_HANDLE_VALUE;
}
DLLAPI void fdelay(int t)
{
int i,j,a;
for(i = 0;i < t; i++)
for(j = 0; j < t; j++)
a = 0;
}
DLLAPI void WaitMs(long t)
{
Sleep(t);
}
int CheckDate()
{
char tmpbuf[10], buf[6],
int i;
long int temp;
_strdate( tmpbuf );
buf[2] = tmpbuf[0];
buf[3] = tmpbuf[1];
buf[4] = tmpbuf[3];
buf[5] = tmpbuf[4];
buf[0] = tmpbuf[6];
buf[1] = tmpbuf[7];
for(i = 0,temp = 0; i < 6; i++)
temp = temp*10 + buf[i] - 48;
if( temp > 41110 )
return -1;
else return 0;
}
int StrToInt(char *s, int count)
{
int i,temp;
for(i=0,temp=0;i<count;i++)
temp = temp*10 + s[i] - 48;
return temp;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -