| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- #include "StdAfx.h"
- #include "PduDataFormat.h"
- #include "PduLinkInc.h"
- #include "PduDataFormatOne.h"
- CPduDataFormat* CPduDataFormat::m_pInstance = NULL;
- CPduDataFormat::CPduDataFormat(void)
- {
- ZeroMemory(m_pDataFormatArray, PDU_MAX_CMD_COUNT*sizeof(long));
- }
- CPduDataFormat::~CPduDataFormat(void)
- {
- if(NULL != m_pInstance) delete m_pInstance;
- }
- /*****************************************************************
- **【函数名称】 getInstance
- **【函数功能】 得到接口指针
- **【参数】
- **【返回值】
- ****************************************************************/
- CPduDataFormat* CPduDataFormat::getInstance()
- {
- if(NULL == m_pInstance)
- {
- m_pInstance = new CPduDataFormat();
- } // end if
- return m_pInstance;
- }
- /*****************************************************************
- **【函数名称】 Load
- **【函数功能】 从配置文件中读取PDU数据格式配置信息
- **【参数】 a_lpFileName 配置文件名
- **【返回值】
- ****************************************************************/
- BOOL CPduDataFormat::Load(LPCTSTR a_lpFileName)
- {
- // 读取配置文件头
- int nTotalCount = GetPrivateProfileInt("Head", "TotalCount", 0, a_lpFileName);
- ASSERT(nTotalCount != 0);
- // 读取配置文件内容
- for(int i=0; i<nTotalCount; i++)
- {
- // 读取单个命令的配置信息
- CHAR szAppName[32];
- ZeroMemory(szAppName, 32);
- sprintf_s(szAppName, 32, "PDU_CMD_FORMAT_%03d", i);
- // 生成PDU命令格式解析类
- int nCmdType = GetPrivateProfileInt(szAppName, "CmdType", 0, a_lpFileName); // 命令类型
- CPduDataFormatOne* pFormat = new CPduDataFormatOne((PDU_CMD_TYPE)nCmdType);
- // 生成元数据内容
- int nDataCount = GetPrivateProfileInt(szAppName, "DataCount", 0, a_lpFileName); // 元数据条数
- for(int j=0; j<nDataCount; j++)
- {
- // 得到Key值
- CHAR szKey[32];
- ZeroMemory(szKey, 32);
- sprintf_s(szKey, 32, "DATA[%d]", j);
- // 填充元数据条目
- CHAR szMemo[256];
- ZeroMemory(szMemo, 256);
- GetPrivateProfileString(szAppName, szKey, "0|0|null|0", szMemo, 256, a_lpFileName);
- pFormat->InsertDataMemo(j, szMemo);
- } // end for(DataCount)
- // 保存当前命令解析
- m_pDataFormatArray[nCmdType] = pFormat;
- } // end for(TotalCount)
-
- return TRUE;
- }
- /*****************************************************************
- **【函数名称】 Load
- **【函数功能】 从数据库中读取PDU数据格式配置信息
- **【参数】
- **【返回值】
- ****************************************************************/
- BOOL CPduDataFormat::Load()
- {
- return FALSE;
- }
- /*****************************************************************
- **【函数名称】 Clone
- **【函数功能】 拷贝一个指定命令的副本
- **【参数】 a_nCmdType 命令类型
- a_pCloned 命令副本
- **【返回值】
- ****************************************************************/
- CPduDataFormatOne* CPduDataFormat::Clone(PDU_CMD_TYPE a_nCmdType)
- {
- // 命令格式定义
- if(a_nCmdType >= PDU_MAX_CMD_COUNT) return NULL;
- CPduDataFormatOne* pSource = m_pDataFormatArray[a_nCmdType];
- if(pSource == NULL) return NULL;
- // 生成副本
- CPduDataFormatOne* pDest = new CPduDataFormatOne(a_nCmdType);
- for(int i=0; i<PDU_CMD_MAX_DATA_COUNT; i++)
- {
- if(pSource->m_pDataMemoArray[i] == NULL) break;
-
- // 拷贝数据
- PduDataMemo* pDataMemo = new PduDataMemo;
- memcpy(pDataMemo, pSource->m_pDataMemoArray[i], sizeof(PduDataMemo));
- pDest->m_pDataMemoArray[i] = pDataMemo;
- } // end for
- return pDest;
- }
|