亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mydllpro.cpp

?? 組態王驅動開發包
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// MYDLLPro.cpp : implementation file
//

#include "stdafx.h"
#include "Mydll.h"
#include "MYDLLPro.h"
#include "reg.h"
#include "math.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#ifndef  TEST_ShowMessage 
#define    ShowMessage  TRACE
#endif

#ifdef   TEST_ShowMessage 
void ShowMessage( const char* msg);
void ConVertBufToShowMessage(char * BufBeforeConVert, char * BufAfterConVert, int ConVertlong);
#define WM_MESSAGE_OUTPUT WM_USER+50
#endif
/////////////////////////////////////////////////////////////////////////////
// MYDLLPro

IMPLEMENT_DYNCREATE(MYDLLPro, CCmdTarget)

MYDLLPro::MYDLLPro()
{
	EnableAutomation();
	
	// To keep the application running as long as an OLE automation 
	//	object is active, the constructor calls AfxOleLockApp.

	m_nTimeOut =5000;
	m_nLastErrorCode = -1;
	m_hComm = INVALID_HANDLE_VALUE; 	
	
	AfxOleLockApp();
}

MYDLLPro::~MYDLLPro()
{
	// To terminate the application when all objects created with
	// 	with OLE automation, the destructor calls AfxOleUnlockApp.

	if(m_hComm != INVALID_HANDLE_VALUE)
	{
		CloseHandle(m_hComm);
		m_hComm = INVALID_HANDLE_VALUE;
	}		
	
	AfxOleUnlockApp();
}


void MYDLLPro::OnFinalRelease()
{
	// When the last reference for an automation object is released
	// OnFinalRelease is called.  The base class will automatically
	// deletes the object.  Add additional cleanup required for your
	// object before calling the base class.

	CCmdTarget::OnFinalRelease();
}


BEGIN_MESSAGE_MAP(MYDLLPro, CCmdTarget)
	//{{AFX_MSG_MAP(MYDLLPro)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

BEGIN_DISPATCH_MAP(MYDLLPro, CCmdTarget)
	//{{AFX_DISPATCH_MAP(MYDLLPro)
		// NOTE - the ClassWizard will add and remove mapping macros here.
	//}}AFX_DISPATCH_MAP
END_DISPATCH_MAP()

// Note: we add support for IID_IMYDLLPro to support typesafe binding
//  from VBA.  This IID must match the GUID that is attached to the 
//  dispinterface in the .ODL file.

// {185EE497-6AE3-4530-BC1A-8EAAADEC1F33}
static const IID IID_IMYDLLPro =
{ 0x185ee497, 0x6ae3, 0x4530, { 0xbc, 0x1a, 0x8e, 0xaa, 0xad, 0xec, 0x1f, 0x33 } };

BEGIN_INTERFACE_MAP(MYDLLPro, CCmdTarget)
	INTERFACE_PART(MYDLLPro, IID_IMYDLLPro, Dispatch)
	INTERFACE_PART(MYDLLPro, IID_ProtocolImp, ProtocolImp)
END_INTERFACE_MAP()

// {40F58121-E7AA-47CD-8F86-97D4554A769C}
IMPLEMENT_OLECREATE(MYDLLPro, "Mydll.MYDLLPro", 0x40f58121, 0xe7aa, 0x47cd, 0x8f, 0x86, 0x97, 0xd4, 0x55, 0x4a, 0x76, 0x9c)

/////////////////////////////////////////////////////////////////////////////
// MYDLLPro message handlers

STDMETHODIMP_(ULONG) MYDLLPro::XProtocolImp::AddRef(void)
{
    METHOD_PROLOGUE(MYDLLPro, ProtocolImp);
    return pThis->ExternalAddRef();
}

STDMETHODIMP_(ULONG) MYDLLPro::XProtocolImp::Release(void)
{
    METHOD_PROLOGUE(MYDLLPro, ProtocolImp);
    return pThis->ExternalRelease();
}

STDMETHODIMP MYDLLPro::XProtocolImp::QueryInterface(REFIID iid, void FAR* FAR* ppvObj)
{
    METHOD_PROLOGUE(MYDLLPro, ProtocolImp);
    return pThis->ExternalQueryInterface(&iid, ppvObj);
}

STDMETHODIMP_(BOOL) MYDLLPro::XProtocolImp::TryConnect( char * pDeviceName, int nUnitAddr, LPVOID lpDevAddr )
{
    METHOD_PROLOGUE(MYDLLPro, ProtocolImp);

	PPACKET   pPac = new PACKET;
	IdNo     *pTempIdNo = new IdNo;
	pPac->nPacketType = PT_READ;
	pPac->nRegType = 0;
	pPac->nUnitNo = nUnitAddr;
	pPac->nStartNo = 0;
	pPac->nEndNo = 0;

	pTempIdNo->wNo = pPac->nStartNo;
	pTempIdNo->wDataType = FLOAT_DATATYPE;

	pPac->varList.AddTail(pTempIdNo);
	if(ProcessPacket( pPac ))
	{
		delete   pPac;
		delete   pTempIdNo;
		return   TRUE;
	}
	else
	{
		delete   pPac;
		delete   pTempIdNo;
		return   FALSE;
	}		
}

STDMETHODIMP_(BOOL) MYDLLPro::XProtocolImp::StrToDevAddr( const  char * str,LPVOID lpDevAddr)
{
    METHOD_PROLOGUE(MYDLLPro, ProtocolImp); 
	DEVADDR * pDevAddr =(DEVADDR *) lpDevAddr;

	int len=strlen(str);	
	WORD addr=0;

//	_strupr(str);

	for(int i=0;i<len;i++) 
	{
		if( !isdigit(str[i]) )
		{
			pThis->m_nLastErrorCode = USER_ADDR_SCOPE_ERROR;
			return FALSE;
		}
	}
	addr=(WORD)atoi(str);
	if(addr<128 || addr>255)
	{
		pThis->m_nLastErrorCode = USER_ADDR_SCOPE_ERROR;
		return FALSE;
	}
	
	pDevAddr->nDevAddr = addr;

	return  TRUE;
}

STDMETHODIMP_(char *) MYDLLPro::XProtocolImp::GetLastError()
{
    METHOD_PROLOGUE(MYDLLPro, ProtocolImp);
	
	if(pThis->m_nLastErrorCode != -1)
		return Error_Message_Table[pThis->m_nLastErrorCode];
	else
		return NULL;
}

STDMETHODIMP_(BOOL) MYDLLPro::XProtocolImp::OpenComDevice( int nDeviceType, LPVOID lpInitData)
{
    METHOD_PROLOGUE(MYDLLPro, ProtocolImp); 
	
	ASSERT( nDeviceType == SERIAL_DEV_TYPE );
	
	return pThis->InitialComm( lpInitData );

/*	char szPort[8]; 
	int Flag = 1;
	ComDevice *pcc = (ComDevice *)lpInitData;   
    if(pcc->isRs232 != RS232)
	{
		pcc->isRs232 = RS485;
	    pThis->m_nCommType=RS485;/*XCL  添加*/
//	}
/*	if((pcc->baudRate<9600)||(pcc->baudRate)>57600)
	{ 	
		TRACE( "Error Config for Commounication .\n" );
		pThis->m_nLastErrorCode = COMMUNICATION_CONFIG_ERROR;
		return FALSE;
	}  
	pThis->m_nTimeOut = pcc->timeOut;
	strcpy(szPort, pcc->deviceName);
    HANDLE hComm;
	hComm = CreateFile( szPort, GENERIC_READ | GENERIC_WRITE, 0, 
		NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL , NULL );
	if ( INVALID_HANDLE_VALUE==hComm )
	{
		TRACE( "Error in open COM port.\n" );
		pThis->m_nLastErrorCode = FAILED_OPEN_COM; 
		return FALSE; 
	}
//	SetupComm( hComm, RX_QUEU, TX_QUEU );
	SetupComm( hComm, 512, 512 );
	
	DCB dcb;
	GetCommState( hComm, &dcb );
	dcb.BaudRate = (WORD)pcc->baudRate;
	dcb.ByteSize =  (BYTE)pcc->dataBits;      
	dcb.StopBits =  ONESTOPBIT;      
	dcb.Parity   =  (BYTE)pcc->parity;
	if ( !SetCommState( hComm, &dcb ) )
	{
		CloseHandle( hComm );
		TRACE( "Error in SetCommDcb.\n" );
//        pThis->m_nLastErrorCode = FAILED_INITIALIZED_COM;
		return FALSE;
	}	
    PurgeComm( hComm, PURGE_TXABORT | PURGE_RXABORT |
		PURGE_TXCLEAR | PURGE_RXCLEAR ) ;
	
	COMMTIMEOUTS CommTimeOuts;
    CommTimeOuts.ReadIntervalTimeout = 0xFFFFFFFF ;
    CommTimeOuts.ReadTotalTimeoutMultiplier = 0 ;
    CommTimeOuts.ReadTotalTimeoutConstant = 0 ;
    CommTimeOuts.WriteTotalTimeoutMultiplier = 5;
    CommTimeOuts.WriteTotalTimeoutConstant = 0 ;
    SetCommTimeouts( hComm, &CommTimeOuts ) ;
	
	pThis->m_hComm = hComm;
	return  TRUE;*/
}

STDMETHODIMP_(BOOL) MYDLLPro::XProtocolImp::CloseComDevice()
{
    METHOD_PROLOGUE(MYDLLPro, ProtocolImp);
	
	if(pThis->m_hComm != INVALID_HANDLE_VALUE)
	{
		CloseHandle( pThis->m_hComm );
		pThis->m_hComm = INVALID_HANDLE_VALUE;
	}
    return TRUE;
}

STDMETHODIMP_(BOOL) MYDLLPro::XProtocolImp::InitialDevice(char *  pDeviceName, int nUnitAddr, LPVOID lpDevAddr)
{
    METHOD_PROLOGUE(MYDLLPro, ProtocolImp);
	return TRUE;
}


BOOL MYDLLPro::PhysicalReceive(char * pReceive, int & nLen)
{
	DWORD  dwError;
	COMSTAT	cs;
	DWORD dwTimeOut=GetTickCount()+m_nTimeOut;
	ULONG   nByteRead = 0;
	int     RecLen = 0;
	char cTemp[1024];
	memset(cTemp,0,sizeof(cTemp));

	while(TRUE)
	{
		if(GetTickCount() > dwTimeOut)
		{
//			m_nLastErrorCode = TIME_OUT_ERROR;
			TRACE("Time Out!\n");
			return FALSE;
		}
		ClearCommError( m_hComm, &dwError, &cs );

//		if(cs.cbInQue > 1024)
//			RecLen = 1024;
//		else 
//			RecLen = cs.cbInQue;

		if ( cs.cbInQue )
		{
			BOOL bReadSuc = ReadFile(m_hComm, cTemp, cs.cbInQue, &nByteRead, NULL);
			if ( bReadSuc  )
			{
				memcpy(pReceive,cTemp,nByteRead);
				nLen = (int) nByteRead;
//				TRACE("receive  %s\n",pReceive);
				
			}
			return  TRUE;
		}			//for(i=0;i<strlen(pReceive)
//		if(pReceive[nLen-1]==0x0A) 
//			return TRUE;
	}
	return FALSE;
}

STDMETHODIMP_(int) MYDLLPro::XProtocolImp::LoadDeviceInfo( const char *sProd, const char *sDevName, int nType )
{
    METHOD_PROLOGUE(MYDLLPro, ProtocolImp);
	
	return  TRUE;
}

STDMETHODIMP_(BOOL) MYDLLPro::XProtocolImp::GetRegisters(char *szDeviceName,LPVOID * ppRegs, int *pRegNum)
{	
    METHOD_PROLOGUE(MYDLLPro, ProtocolImp);
		*ppRegs = (LPVOID)&gsRegInfos;
		*pRegNum = REG_TYPE_NUM;
	
	return TRUE;
}

STDMETHODIMP_(BOOL) MYDLLPro::XProtocolImp:: AddVarToPacket( LPVOID lpVar, int nVarAccessType,LPVOID lpPacket)
{
	METHOD_PROLOGUE(MYDLLPro, ProtocolImp);
	
    PPACKET pPack = (PACKET *)lpPacket;
    PPLCVAR pVar = (PLCVAR *)lpVar;

	int nTotalNo;

	if((nVarAccessType == pPack->nPacketType)&&(pPack->nUnitNo == pVar->nUnitNo)
        && (pPack->nRegType == pVar->nRegType))
	{
		if ( nVarAccessType == PT_WRITE )
		{
			if ( pVar->nNo == pPack->nStartNo )  
				return TRUE;
			else  
				return FALSE;
		}
	  //Read Operate 
		if ( pVar->nNo<pPack->nStartNo )
		{//Graph:		-----no-------Start================End----------
			nTotalNo = pPack->nEndNo - pVar->nNo + 1;
			if ( nTotalNo <= MAX_PACKET_NUM )
			{
				pPack->nStartNo = pVar->nNo;	
				return TRUE;
			}
		}
		else if ( pVar->nNo > pPack->nEndNo )
		{//Graph:		------------Start================End----no------
			nTotalNo = pVar->nNo - pPack->nStartNo + 1;
			if ( nTotalNo <= MAX_PACKET_NUM )
			{
				pPack->nEndNo = pVar->nNo;
				return TRUE;
			}
		}
		else
		{//Graph:		------------Start====no============End----------
			return TRUE;
		}		
	}
	return FALSE;		
}

STDMETHODIMP_(WORD) MYDLLPro::XProtocolImp:: ConvertUserConfigToVar( LPVOID lpDbItem, LPVOID lpVar )
{
	METHOD_PROLOGUE(MYDLLPro, ProtocolImp);
	
	MiniDbItem * pTheDbItem = (MiniDbItem*)lpDbItem;
	CString strRegName;
	
	CString strDevName(pTheDbItem->szDevName);
	strRegName = pTheDbItem->szRegister;      
	
	if(pThis->MyConvert( lpDbItem, lpVar,
		gsRegInfos, REG_TYPE_NUM))
		return 1;
	return 0;
}

STDMETHODIMP_(int) MYDLLPro::XProtocolImp:: ProcessPacket( LPVOID lpPacket )
{
    METHOD_PROLOGUE(MYDLLPro, ProtocolImp);
	

	PPACKET pPac = (PPACKET) lpPacket;

	POSITION position =  pPac->varList.GetHeadPosition();
	ID_NO* idNo = (ID_NO*)pPac->varList.GetNext(position);
	
	char Readbuffer[1024];	
	char SendBuffer[64];
	char pData[1024];
		
	DWORD    dwTimeOutTick = 0;
	BOOL     bTimeOut = FALSE;

    int  nLen=0;
	int  nReceiveLen = 0;
	int  nByteRead = 0;
	int  ret = 0;
	int  bError  = 0;
	int  bPacSuc = 0;	

	memset(Readbuffer,0,sizeof(Readbuffer));	
	memset(SendBuffer,0,sizeof(SendBuffer));	
	memset(pData,0,sizeof(pData));	
	
	if(PT_WRITE == pPac->nPacketType)//寫數據
	{
		pThis->m_nLastErrorCode = DONOT_WRITE; 
		return  FALSE;
	}	
	
	pThis->GetSendString(pPac,SendBuffer, nLen);
	
	ASSERT(nLen > 0);

	pThis->PhysicalSend(SendBuffer, nLen);
	
	TRACE("Send %s\n",SendBuffer+1);

	Sleep(100);

	dwTimeOutTick = GetTickCount() + pThis->m_nTimeOut;
	
	while ( TRUE )
	{					
		if( pThis->PhysicalReceive( Readbuffer, nByteRead ) )
		{					
			memcpy( pData+nReceiveLen, Readbuffer, nByteRead );
			/*	for (int i=0;i<nByteRead;i++)
			{
			TRACE("%x,",Readbuffer[i]);					
			}
			TRACE("\n");*/
			TRACE("receive %s\n",Readbuffer);
			
			nReceiveLen+= nByteRead;
			pData[nReceiveLen] = 0;
			
			ret = pThis->PreProcessData(pPac, pData, nReceiveLen, nByteRead);
			//#ifdef _DEBUG
			//ret = RECEIVE_RECEIVED;//test
			//#endif
			if(ret == RECEIVE_RECEIVED)
			{
				//					receivetime = GetTickCount() - (dwTimeOutTick - pThis->m_nTimeOut);
				break;
			}
			

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产专区综合网| 国模娜娜一区二区三区| 一区在线播放视频| 久久久久久毛片| 久久久精品综合| 国产精品欧美一级免费| 一区二区中文字幕在线| 18欧美亚洲精品| 亚洲综合图片区| 日日摸夜夜添夜夜添精品视频| 日日摸夜夜添夜夜添国产精品 | 91精品国产综合久久精品| 欧美午夜精品久久久久久超碰 | 成人夜色视频网站在线观看| 六月丁香婷婷久久| 国产精品18久久久久久久久久久久 | 欧美极品xxx| 成人欧美一区二区三区1314| 一区二区高清在线| 免费三级欧美电影| 国产不卡视频在线观看| 99综合影院在线| 欧美日本一道本| 久久精品亚洲精品国产欧美kt∨ | 国内欧美视频一区二区| 99久久久免费精品国产一区二区| 日本丶国产丶欧美色综合| 欧美日韩国产另类一区| 精品剧情在线观看| 亚洲色图视频网| 麻豆91在线看| 色综合久久综合网| 日韩久久久精品| 亚洲综合色噜噜狠狠| 精品午夜一区二区三区在线观看| 成年人网站91| 日韩欧美一区电影| 亚洲精品国产一区二区三区四区在线| 天天操天天色综合| 国产成人精品综合在线观看| 精品视频全国免费看| 久久久久久久网| 樱桃国产成人精品视频| 国产精品中文有码| 欧美一卡二卡三卡| 国产精品久久久久久久久免费相片| 午夜激情久久久| 日本韩国一区二区三区| 国产精品美女久久久久久久久久久 | 久久综合久久久久88| 一区二区三区.www| 成人av电影在线播放| 精品va天堂亚洲国产| 亚洲成人第一页| 91免费观看视频| 国产日韩欧美一区二区三区综合| 免费美女久久99| 在线播放91灌醉迷j高跟美女| 亚洲欧美激情插| 成人app在线| 国产精品国产馆在线真实露脸 | 色婷婷综合中文久久一本| 国产亚洲一区二区三区四区| 全部av―极品视觉盛宴亚洲| 欧美日韩精品欧美日韩精品| 亚洲乱码国产乱码精品精98午夜| 成人精品国产一区二区4080| 国产午夜精品久久久久久免费视 | 亚洲欧美偷拍另类a∨色屁股| 国产成人免费在线观看不卡| 久久精品一区二区三区不卡牛牛| 九色综合狠狠综合久久| 精品日产卡一卡二卡麻豆| 蜜臀va亚洲va欧美va天堂| 日韩视频一区二区| 黑人精品欧美一区二区蜜桃| 久久综合九色综合欧美就去吻 | 久久精品国产精品亚洲精品| 91精品国产高清一区二区三区蜜臀| 亚洲自拍偷拍欧美| 欧美日韩专区在线| 免费成人av资源网| 久久久久99精品一区| 成人综合日日夜夜| 亚洲三级在线免费观看| 99r国产精品| 一区二区高清在线| 欧美高清dvd| 激情亚洲综合在线| 国产欧美日本一区视频| 成人精品一区二区三区四区| 亚洲美女在线一区| 91精品欧美福利在线观看| 激情欧美一区二区| 最新日韩在线视频| 6080国产精品一区二区| 国产一区二区在线电影| 亚洲色图.com| 日韩免费电影一区| 波多野结衣精品在线| 日韩一区在线看| 欧美精品久久久久久久久老牛影院| 免费成人你懂的| 亚洲欧美视频一区| 555www色欧美视频| 成人精品视频一区| 婷婷六月综合亚洲| 精品成人私密视频| 在线观看视频一区二区| 国产一区二区三区电影在线观看 | 午夜免费欧美电影| 91亚洲精品久久久蜜桃| 日韩黄色免费电影| 国产高清亚洲一区| 亚洲精品日产精品乱码不卡| 精品国产一区二区三区久久久蜜月| 国产成人自拍网| 日韩极品在线观看| 国产精品美女久久久久久久久久久 | 国产精品夜夜爽| 亚洲高清三级视频| 国产精品蜜臀在线观看| 欧美大片日本大片免费观看| www.亚洲色图| 国产精品123| 蜜桃视频在线一区| 亚洲一区在线观看免费 | 国产盗摄精品一区二区三区在线| 精品一区二区三区免费毛片爱| 国产精品欧美一区二区三区| 日韩欧美一区二区久久婷婷| 在线观看国产日韩| 99久久免费视频.com| 国产成人精品网址| 精品在线观看视频| 奇米一区二区三区av| 亚洲国产wwwccc36天堂| 国产精品久久久久aaaa| 精品国产乱码久久久久久1区2区| 欧美日韩精品专区| 在线观看日韩高清av| 91网站最新地址| 91日韩精品一区| 一本一道综合狠狠老| 91女厕偷拍女厕偷拍高清| 成人国产一区二区三区精品| 成人午夜视频在线观看| 国产精品一级黄| 成人精品视频一区| 99久久99久久免费精品蜜臀| 成人综合婷婷国产精品久久蜜臀| 成人少妇影院yyyy| 99国产精品一区| 在线免费观看日本一区| 欧美探花视频资源| 欧美日韩精品免费| 日韩一区二区三区三四区视频在线观看| 欧美日韩国产综合一区二区| 7777精品伊人久久久大香线蕉| 欧美日韩高清一区二区三区| 欧美丰满少妇xxxbbb| 日韩午夜在线播放| 国产日韩三级在线| 亚洲日本在线观看| 亚洲韩国精品一区| 久久福利资源站| 丁香五精品蜜臀久久久久99网站 | 一区二区三区四区不卡视频| 亚洲国产精品视频| 琪琪一区二区三区| 国产成人av电影在线播放| www.视频一区| 欧美三级在线播放| 欧美精品一区二区三区在线播放 | 欧美人妖巨大在线| 欧美不卡视频一区| 中文字幕一区二区三区不卡在线 | 国产精品久久久久久久午夜片| 一区二区三区四区国产精品| 日韩成人伦理电影在线观看| 国产在线精品视频| 色av成人天堂桃色av| 日韩一级大片在线| 中文字幕亚洲一区二区va在线| 亚洲成人综合在线| 高清成人在线观看| 欧美日韩日本视频| 久久九九影视网| 日韩专区一卡二卡| 91影视在线播放| 2023国产一二三区日本精品2022| 亚洲欧美日韩在线播放| 狠狠色丁香九九婷婷综合五月 | 免费久久精品视频| 91亚洲国产成人精品一区二区三 | aaa国产一区| 久久新电视剧免费观看| 天堂成人国产精品一区| 成人一区二区视频| 精品久久久久久久久久久久包黑料|