#pragma once #include "FunctionErrorCode.h" #include "FunctionDataTypeCommon.h" #include "AdvancedFunctionDataElement.h" #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "ECOMFunctionAPIX64D.lib") #else #pragma comment(lib, "ECOMFunctionAPIX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "ECOMFunctionAPID.lib") #else #pragma comment(lib, "ECOMFunctionAPI.lib") #endif #endif #ifndef _SHAREMEMCLIENT_CLASSINDLL #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "ShareMemAPIX64D.lib") #else #pragma comment(lib, "ShareMemAPIX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "ShareMemAPID.lib") #else #pragma comment(lib, "ShareMemAPI.lib") #endif #endif #endif #ifdef _SHAREMEMCLIENT_CLASSINDLL #define SHAREMEMCLIENTDLL_CLASS_DECL _declspec(dllexport) #else #define SHAREMEMCLIENTDLL_CLASS_DECL _declspec(dllimport) #endif #define INVALID_SHAREMEM_ID (unsigned __int64)~0 class CShareMemInfo; class CBaseFunctionDataElement; class SHAREMEMCLIENTDLL_CLASS_DECL CShareMemClient { public: CShareMemClient(); virtual ~CShareMemClient(); unsigned short GetUserId(){ return m_dwUserId; }; CBaseFunctionDataElement* CreateDataElement(FUNCTION_DATATYPE eDataType, const wstring& strName = L""); void ReleaseDataElement(CBaseFunctionDataElement* pDataElement); int Register(); int UnRegister(); int ReadShareMem(unsigned __int64 dwShareMemId, CBaseFunctionDataElement** vecDataElement, unsigned int nBufferCount, unsigned int& nElementCount); int WriteShareMem(CBaseFunctionDataElement** vecDataElement, unsigned int nElementCount, unsigned __int64& dwShareMemId); int ReleaseShareMem(unsigned int dwShareMemId); int ReleaseAllShareMem(); private: static void EncodeId(unsigned short wUserId, unsigned int nShareMemId, unsigned short wContentId, unsigned __int64& dwShareMemId); static void DecodeId(unsigned __int64 dwShareMemId, unsigned short& wUserId, unsigned int& nShareMemId, unsigned short& wContentId); unsigned short m_dwUserId; CShareMemInfo* m_ShareMemInfo; unsigned int m_dwShareMemCounter; CRITICAL_SECTION m_ShareMemCounterCritical; unsigned short m_dwContentCounter; CRITICAL_SECTION m_ContentCounterCritical; };