⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ownerarchive.h

📁 国家环保总局污染源在线通讯协议的简化版
💻 H
字号:
// OwnerArchive.h: interface for the COwnerArchive class.
///	设备驱动模版
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_OWNERARCHIVE_H__0ABD19B6_AF1E_4884_9DE5_6533B4400FB8__INCLUDED_)
#define AFX_OWNERARCHIVE_H__0ABD19B6_AF1E_4884_9DE5_6533B4400FB8__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#define OWNERARCHIVE_BUFFER_INC_SIZE (0x4096) //每次增加4K

#define MFC_PERSIST

#include "afxtempl.h"

typedef CString CStdString;
typedef CByteArray BYTEARRAY ;
#define ARRAYSIZE(i) (i).GetSize()
#define ARRAYRESIZE(i,j) (i).SetSize(j)
#define COPYARRAY(i,j)   (i).Copy(j)
#define ARRAYINSERT(i,j,k) (i).InsertAt(j,k)
#define ARRAYADD(i,j) (i).Add(j)
#define ARRAYDATA(i) (i).GetData()
#define ARRAYREMOVE(i,j) (i).RemoveAt(j)
#define ARRAYCLEAR(i) (i).SetSize(0)
#define ARRAYERASE(Mcgs_i,Mcgs_j,Mcgs_k) {BYTEARRAY Mcgs_b;											\
			ARRAYRESIZE(Mcgs_b,ARRAYSIZE(Mcgs_i) - Mcgs_k + Mcgs_j);								\
			memcpy(ARRAYDATA(Mcgs_b), ARRAYDATA(Mcgs_i) + Mcgs_k, ARRAYSIZE(Mcgs_i) - Mcgs_k);			\
			ARRAYRESIZE(Mcgs_i,ARRAYSIZE(Mcgs_i) - Mcgs_k + Mcgs_j);								\
			COPYARRAY(Mcgs_i,Mcgs_b);};

#include <afxmt.h>


class COwnerArchive;

//	此类为了流化而设计,作为各个需要流化的类的基类
class COwnerObject
{
public:
	virtual ~COwnerObject(){};  // virtual destructors are necessary	
protected:
	COwnerObject(){};
private:
	COwnerObject(const COwnerObject& objectSrc);       // no implementation
	void operator=(const COwnerObject& objectSrc);     // no implementation
public:
	virtual void Serialize(COwnerArchive& ar){};
};

class COwnerArchive  
{
	BYTEARRAY m_vectorBuffer;
	DWORD m_dwBufferSize;//使用的大小,指针
public: 
	enum ARCHIVESTATUS{load = 0,storing} m_status;
	COwnerArchive(ARCHIVESTATUS c);
	virtual ~COwnerArchive();
	void SvrChangeMode(ARCHIVESTATUS c);
	bool IsStoring();
	void SvrSeekToBegin();
	DWORD SvrGetBufferSize();	
	DWORD SvrGetRealBufferSize();
	bool SvrWrite(const unsigned char* pBuff,int iCount);
	bool SvrRead(unsigned char* pBuff,int iCount);
	void Write(const void* pBuff,int iCount);
	void Read(void* pBuff,int iCount);
	bool SvrWrite(BYTEARRAY& Buff);
	bool SvrRead(BYTEARRAY& Buff);	

	COwnerArchive& operator<<(BYTE value);
	COwnerArchive& operator>>(BYTE& value);
	COwnerArchive& operator<<(char value); 
	COwnerArchive& operator>>(char& value); 
	COwnerArchive& operator<<(int value);
	COwnerArchive& operator>>(int& value);
	COwnerArchive& operator<<(long value); 
    COwnerArchive& operator>>(long& value);
	COwnerArchive& operator<<(DWORD value);  
	COwnerArchive& operator>>(DWORD& value);
	COwnerArchive& operator<<(WORD value);  
	COwnerArchive& operator>>(WORD& value);
	COwnerArchive& operator<<(float value);  
	COwnerArchive& operator>>(float& value);
	COwnerArchive& operator<<(double value);  
	COwnerArchive& operator>>(double& value);
	COwnerArchive& operator<<(bool value);
	COwnerArchive& operator>>(bool& value);	
	COwnerArchive& operator<<(CStdString& value);
	COwnerArchive& operator>>(CStdString& value);
	COwnerArchive& operator<<(COwnerObject& value);
	COwnerArchive& operator>>(COwnerObject& value);

#ifdef E_MCGSRUN	
#else
	COwnerArchive& operator >> (LOGFONT& value);
#endif


private:
	bool mfCheckBuffer(int iCount);
};

enum DEVTYPE {DEV_PARENT = 0,DEV_CHILD = 1};
enum DEVSTYLE {DEV_SIMPLE = 0,DEV_COMM,DEV_CARD,
			DEV_OPC,
			DEV_TCPIP,
			DEV_NULL3,
			DEV_NULL4,
			DEV_NULL5,
			DEV_NULL6,
			DEV_NULL7,
			DEV_NULL8,
			DEV_NULL9,
			DEV_NULL10,
			DEV_NULL11,
			DEV_NULL12,
			DEV_NETWORKDEV};

#define MCGS_DLL_FUNC extern "C" int __declspec(dllexport)  __stdcall  

enum MCGS_PARENT_TYPE{ DEV_PARENT_TYPE_NONE = 0,DEV_PARENT_TYPE_TCPIP,DEV_PARENT_TYPE_COMM,DEV_PARENT_TYPE_DLL};
enum MCGS_RUNTIME_TYPE{ MCGS_RUNTIME_TYPE_EMU = 0,MCGS_RUNTIME_TYPE_WCE_X86,MCGS_RUNTIME_TYPE_WCE_ARM};

//dll wrapper class using the virtual class
typedef CArray<bool,bool> boolARRAY;
typedef CArray<double,double> DOUBLEARRAY;
typedef CArray<int,int> INTARRAY;

enum DATATYPE
{
	VANY = -2,
	VGROUP = -1,
	VNOTHING = 0,
	VINTEGER = 1,
	VSINGLE = 2,
    VSTRING = 3,	
	VEVENT = 4,	
	VUSRWND = 5,
	VDEVICE = 6,
	VSTGY = 7,
	VDATAPOS = 8,
	VSINGLEDATAPOS = 9,
	VDATETIME = 10,
	VLONGBINARY = 11,
	VOBJECT = 12,
};

// 以上为MCGS定义的符号

// 以下为用户定义的符号

// 由MCGS负责分配
// 使用本指针的目的为在多个线程间调用时,区别不同的设备
struct MCGS_DATA
{
	CString	m_strDevName;			// 设备名
	CString m_strNote;				// 注释注释
	int     m_iLoopTime;			// 轮循时间

	// 保存数据的流化类,由MCGS负责分配,负责设备组态数据的存储和装载
	COwnerArchive* m_pArchive;

	// 指针,缺省状态为NULL,允许设备编写者使用自定义的数据结构,来保存从m_pArchive中流化出来的设备信息,
	// 或者保存两次设备函数调用之间的信息,注意,这些信息不能保存在设备驱动的局部变量或静态变量和全局变量中。
	void* m_pDevData;

	MCGS_PARENT_TYPE m_ParentType;	// 父设备类型,没有父设备,Tcpip父设备和串口父设备
	void* m_pParentData;			// 父设备数据,对于Tcpip父设备,为CAsyncSocket指针,对串口父设备,为串口句柄
	
	void * pFuncQuery;              //该指针是McgsDevCallBackFunc类型的函数指针
};


#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -