📄 ownerarchive.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 + -