200分!进来帮忙!!!! http://expert.csdn.net/Expert/topic/1751/1751755.xml?temp=.4780847 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //---------------------------//a.cpp#include < windows.h >#include <winbase.h>HANDLE m_hCom ;BOOL m_bOpend ;OVERLAPPED m_OverlappedRead;OVERLAPPED m_OverlappedWrite;WINAPI int OpenCom(int com){ char szPort[15]; DCB dcb; wsprintf(szPort ,"com%d",com); m_hCom = CreateFile(szPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL); if (m_hCom==NULL)return(1); memset( &m_OverlappedRead,0,sizeof(OVERLAPPED)); memset( &m_OverlappedWrite,0,sizeof(OVERLAPPED)); COMMTIMEOUTS CommTimeOuts; CommTimeOuts.ReadIntervalTimeout=0xFFFFFFFF; CommTimeOuts.ReadTotalTimeoutMultiplier=0; CommTimeOuts.ReadTotalTimeoutConstant=0; CommTimeOuts.WriteTotalTimeoutMultiplier=0; CommTimeOuts.WriteTotalTimeoutConstant=500; m_OverlappedRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); m_OverlappedWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL); dcb.DCBlength=sizeof(DCB); GetCommState(m_hCom,&dcb); dcb.BaudRate=9600; dcb.ByteSize=8; if (!SetCommState(m_hCom,&dcb)||!SetupComm(m_hCom,10000,10000) ||m_OverlappedRead.hEvent==NULL||m_OverlappedWrite.hEvent==NULL) { DWORD dwError=GetLastError(); if(m_OverlappedRead.hEvent !=NULL) CloseHandle(m_OverlappedRead.hEvent); if(m_OverlappedWrite.hEvent !=NULL) CloseHandle(m_OverlappedWrite.hEvent); CloseHandle(m_hCom); return (1); } //CloseHandle(m_hCom); return(0);}WINAPI int InBufferCount( void){ if (!m_bOpend||m_hCom==NULL) return (1); DWORD dwErrorFlags; COMSTAT ComStat; ClearCommError(m_hCom,&dwErrorFlags,&ComStat); return (int)ComStat.cbInQue;}WINAPI int ReadData(void *buffer,DWORD dwBytesRead){ if (!m_bOpend||m_hCom==NULL) return (1); BOOL bReadStatus; DWORD dwErrorFlags; COMSTAT ComStat; ClearCommError(m_hCom,&dwErrorFlags,&ComStat); if(!ComStat.cbInQue) return (1); dwBytesRead=min(dwBytesRead,(DWORD) ComStat.cbInQue); bReadStatus=ReadFile(m_hCom,buffer,dwBytesRead,&dwBytesRead,&m_OverlappedRead); if (!bReadStatus) { if(GetLastError()==ERROR_IO_PENDING) { WaitForSingleObject(m_OverlappedRead.hEvent,2000); return (1); } return dwBytesRead; } return (0);}WINAPI int SendData(const char *buffer,DWORD bwBytesWritten){ if(m_bOpend||m_hCom==NULL) return (1); BOOL bWriteStat; bWriteStat=WriteFile(m_hCom,buffer,bwBytesWritten,&bwBytesWritten,&m_OverlappedWrite); if(!bWriteStat) { if (GetLastError()==ERROR_IO_PENDING) { return bwBytesWritten; } return (0); } return bwBytesWritten;}WINAPI int CloseCom(){ CloseHandle(m_hCom); return (1);} //--------------------------- //a.hHANDLE m_hCom ; OVERLAPPED m_OverlappedRead; OVERLAPPED m_OverlappedWrite;WINAPI int OpenCom(int com);WINAPI int ReadData(void *buffer,DWORD dwBytesRead);WINAPI int SendData(const char *buffer,DWORD cwBytesWritten);WINAPI int InBufferCount( void);WINAPI int CloseCom(); //--------------------------- //a.def LIBRARY "ComDll" ;//指出DLL的名字 DESCRIPTION 'ComDll Windows Dynamic Link Library' EXPORTS OpenCom ; EXPORTS ReadData; EXPORTS SendData; EXPORTS InBufferCount; EXPORTS CloseCom; 大家帮看看这个DLL有什么错?编译过去了,可是发不了数据。(线用测试软件测过了,串口也没有问题) 载入文档很慢 要近2分多钟 请高人解答:VS2008中check box如何添加关联变量? TreeCtrl 加减号的问题 CWinThread和堆错误 请教如何能取得本地发出的打印请求的打印内容 如何在两个 MFC 程序间进京数据交换? VC + ADO 压缩数据库、修改数据库密码如何进行? printf一问 怎样让程序重新启动自己? vs2013编写生成的程序在xp上运行报错 一个简单问题,POP数据包前后顺序错位的问题。。。 小弟想学一门语言不知学VC还是JAVE好!
//a.cpp
#include < windows.h >
#include <winbase.h>HANDLE m_hCom ;
BOOL m_bOpend ;OVERLAPPED m_OverlappedRead;
OVERLAPPED m_OverlappedWrite;
WINAPI int OpenCom(int com)
{
char szPort[15];
DCB dcb;
wsprintf(szPort ,"com%d",com);
m_hCom = CreateFile(szPort,GENERIC_READ|GENERIC_WRITE,0,NULL,OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL|FILE_FLAG_OVERLAPPED,NULL);
if (m_hCom==NULL)return(1);
memset( &m_OverlappedRead,0,sizeof(OVERLAPPED));
memset( &m_OverlappedWrite,0,sizeof(OVERLAPPED));
COMMTIMEOUTS CommTimeOuts;
CommTimeOuts.ReadIntervalTimeout=0xFFFFFFFF;
CommTimeOuts.ReadTotalTimeoutMultiplier=0;
CommTimeOuts.ReadTotalTimeoutConstant=0;
CommTimeOuts.WriteTotalTimeoutMultiplier=0;
CommTimeOuts.WriteTotalTimeoutConstant=500;
m_OverlappedRead.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
m_OverlappedWrite.hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
dcb.DCBlength=sizeof(DCB);
GetCommState(m_hCom,&dcb);
dcb.BaudRate=9600;
dcb.ByteSize=8;
if (!SetCommState(m_hCom,&dcb)||!SetupComm(m_hCom,10000,10000)
||m_OverlappedRead.hEvent==NULL||m_OverlappedWrite.hEvent==NULL)
{
DWORD dwError=GetLastError();
if(m_OverlappedRead.hEvent !=NULL) CloseHandle(m_OverlappedRead.hEvent);
if(m_OverlappedWrite.hEvent !=NULL) CloseHandle(m_OverlappedWrite.hEvent);
CloseHandle(m_hCom);
return (1);
}
//CloseHandle(m_hCom);
return(0);
}
WINAPI int InBufferCount( void)
{
if (!m_bOpend||m_hCom==NULL) return (1);
DWORD dwErrorFlags;
COMSTAT ComStat;
ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
return (int)ComStat.cbInQue;
}WINAPI int ReadData(void *buffer,DWORD dwBytesRead)
{
if (!m_bOpend||m_hCom==NULL) return (1);
BOOL bReadStatus;
DWORD dwErrorFlags;
COMSTAT ComStat;
ClearCommError(m_hCom,&dwErrorFlags,&ComStat);
if(!ComStat.cbInQue) return (1);
dwBytesRead=min(dwBytesRead,(DWORD) ComStat.cbInQue);
bReadStatus=ReadFile(m_hCom,buffer,dwBytesRead,&dwBytesRead,&m_OverlappedRead);
if (!bReadStatus)
{
if(GetLastError()==ERROR_IO_PENDING)
{
WaitForSingleObject(m_OverlappedRead.hEvent,2000);
return (1);
}
return dwBytesRead;
}
return (0);
}
WINAPI int SendData(const char *buffer,DWORD bwBytesWritten)
{
if(m_bOpend||m_hCom==NULL) return (1);
BOOL bWriteStat;
bWriteStat=WriteFile(m_hCom,buffer,bwBytesWritten,&bwBytesWritten,&m_OverlappedWrite);
if(!bWriteStat)
{
if (GetLastError()==ERROR_IO_PENDING)
{
return bwBytesWritten;
}
return (0);
}
return bwBytesWritten;
}
WINAPI int CloseCom()
{
CloseHandle(m_hCom);
return (1);
}
//a.hHANDLE m_hCom ; OVERLAPPED m_OverlappedRead;
OVERLAPPED m_OverlappedWrite;
WINAPI int OpenCom(int com);
WINAPI int ReadData(void *buffer,DWORD dwBytesRead);
WINAPI int SendData(const char *buffer,DWORD cwBytesWritten);
WINAPI int InBufferCount( void);
WINAPI int CloseCom();
//a.def
LIBRARY "ComDll" ;//指出DLL的名字
DESCRIPTION 'ComDll Windows Dynamic Link Library'
EXPORTS OpenCom ;
EXPORTS ReadData;
EXPORTS SendData;
EXPORTS InBufferCount;
EXPORTS CloseCom;
编译过去了,可是发不了数据。
(线用测试软件测过了,串口也没有问题)