#ifndef SHARE_MEMORY_CLIENT_H #define SHARE_MEMORY_CLIENT_H #define SHAREMEMORY_CLIENT_API #define SHAREMEMORY_CLIENT_C_API extern "C" //#include"ShareMemory_Common.h" //SM_IMAGE的属性值均用8字节数据 unsigned long long const unsigned short SM_KEY_IMAGE_WIDTH = 0x3001; const unsigned short SM_KEY_IMAGE_HEIGHT = 0x3002; const unsigned short SM_KEY_IMAGE_BIT = 0x3003; const unsigned short SM_KEY_IMAGE_DEADLINE_TOP = 0x3004; const unsigned short SM_KEY_IMAGE_DEADLINE_LEFT = 0x3005; const unsigned short SM_KEY_IMAGE_DEADLINE_RIGHT = 0x3006; const unsigned short SM_KEY_IMAGE_DEADLINE_BOTTOM = 0x3007; const unsigned short SM_KEY_IMAGE_TAG = 0x3008; const unsigned short SM_KEY_IMAGE_INDEX = 0x3009; const unsigned short SM_KEY_IMAGE_YEAR = 0x3010; const unsigned short SM_KEY_IMAGE_MONTH = 0x3011; const unsigned short SM_KEY_IMAGE_DAY = 0x3012; const unsigned short SM_KEY_IMAGE_HOUR = 0x3013; const unsigned short SM_KEY_IMAGE_MINUTE = 0x3014; const unsigned short SM_KEY_IMAGE_SEC = 0x3015; const unsigned short SM_KEY_IMAGE_MILLSEC = 0x3016; const unsigned short SM_KEY_IMAGE_XRAYFLAG = 0x3017; const unsigned short SM_KEY_IMAGE_LSB = 0x2018; const unsigned short SM_KEY_IMAGE_DOSE = 0x2019; const unsigned short SM_KEY_IMAGE_PIXELSPACING = 0x201A; const unsigned short SM_KEY_IMAGE_PIXELREPRESENTATION = 0x201B; const unsigned short SM_KEY_IMAGE_ROTATION = 0x201C; const unsigned short SM_KEY_IMAGE_FLIP = 0x201D; const unsigned short SM_KEY_IMAGE_ORIGINX = 0x201E; const unsigned short SM_KEY_IMAGE_ORIGINY = 0x201F; const unsigned short SM_KEY_IMAGE_TYPE = 0x2020; #define IMAGEINFOBLOCKSIZE 2048 //2k大小预留空间,为添加图像头信息。 RAW图在BLOCK最后创建后大小不能变 typedef struct _IMAGE { _IMAGE() { Width = 0; Height = 0; Bit = 0; TopOffset = 0; LeftOffset = 0; RightOffset = 0; BottomOffset = 0; ImageTag = 0; ImageIndex = 0; Year = 0; Month = 0; Day = 0; Hour = 0; Minute = 0; Second = 0; MillonSecond = 0; LSB = 0; Dose = 0; pData = NULL; PixelSpacing = 0; PixelRepresentation = 0; Rotation = 0; Flip = 0; OriginX = 0; OriginY = 0; Type = 0; }; ~_IMAGE() { }; unsigned short Width; unsigned short Height; unsigned short Bit; unsigned short TopOffset; unsigned short LeftOffset; unsigned short RightOffset; unsigned short BottomOffset; unsigned long ImageTag; unsigned long ImageIndex; unsigned short Year; unsigned char Month; unsigned char Day; unsigned char Hour; unsigned char Minute; unsigned char Second; unsigned short MillonSecond; float LSB; float Dose; char *pData; float PixelSpacing; int PixelRepresentation; //0:0000H unsigned integer; 1:0001H 2's complement int Rotation; //Rotation degree clockwise int Flip; int OriginX; int OriginY; int Type; }IMAGE; typedef enum eSMCreateResult { SM_CREATE_FAILED = -1, SM_CREATE_SUCCESS = 0, SM_ALREADYEXIST, }SMCreateResult; typedef enum eSMOpenResult { SM_OPEN_FAILED = -1, SM_OPEN_SUCCESS = 0 , }SMOpenResult; typedef enum eAccessFlag { SM_NOACCESS, SM_READONLY, SM_WRITEONLY, SM_READWRITE, }SMAccessFlag; typedef enum _ShareMemory_Type { SM_TYPE_BLOCK, SM_TYPE_CRICLE, SM_TYPE_QUEUE, SM_TYPE_MAX }SHAREMEMORYTYPE; union SHRAREMEMBLOCKID { unsigned long dwShareMemBId; #pragma pack(1) struct { unsigned long ShareMemId : 8; unsigned long ResetCount : 8; unsigned long BlockId : 16; }stShareMemBId; #pragma pack() }; #define UnvalidSMBid 0xffffffff typedef unsigned long ShareMemoryBlockID; typedef void* SMClientID; SHAREMEMORY_CLIENT_C_API int SMCreate(const char * path, int AccessFlags, unsigned long size, SMClientID & SMinfo);//create包含open SHAREMEMORY_CLIENT_C_API bool SMDestroy(const char * path); SHAREMEMORY_CLIENT_C_API int SMOpen(const char * path, int AccessFlags, SMClientID & SMinfo); SHAREMEMORY_CLIENT_C_API int SMOpenById(unsigned char &ShareMemId, int AccessFlags, SMClientID & SMinfo); SHAREMEMORY_CLIENT_C_API bool SMClose(SMClientID SMinfo); SHAREMEMORY_CLIENT_C_API bool SMLock(SMClientID SMinfo, int timeout); SHAREMEMORY_CLIENT_C_API bool SMUnLock(SMClientID SMinfo); SHAREMEMORY_CLIENT_C_API bool SMSetSize(SMClientID SMinfo, unsigned long size); SHAREMEMORY_CLIENT_C_API unsigned long SMGetSize(SMClientID SMinfo); SHAREMEMORY_CLIENT_C_API bool SMWrite(SMClientID SMinfo, void * buff, unsigned long size); SHAREMEMORY_CLIENT_C_API bool SMRead(SMClientID SMinfo, void * buff, unsigned long size); SHAREMEMORY_CLIENT_C_API bool SMSeek(SMClientID SMinfo, unsigned long position); SHAREMEMORY_CLIENT_C_API bool SMWriteEx(SMClientID SMinfo, unsigned long position, void * buff, unsigned long size); SHAREMEMORY_CLIENT_C_API bool SMReadEx(SMClientID SMinfo, unsigned long position, void * buff, unsigned long size); SHAREMEMORY_CLIENT_C_API bool SMSetSMCCtrl(SMClientID SMinfo, void * buff, unsigned long size); SHAREMEMORY_CLIENT_C_API bool SMGetSMCCtrl(SMClientID SMinfo, void * buff, unsigned long size); SHAREMEMORY_CLIENT_C_API void * SMGetSMCCtrlAddress(SMClientID SMinfo); SHAREMEMORY_CLIENT_C_API void * SMGetSMDataAddr(SMClientID SMCid, unsigned long & DataSize); SHAREMEMORY_CLIENT_C_API unsigned long SMInterLock(SMClientID SMinfo, unsigned long timeout); SHAREMEMORY_CLIENT_C_API bool SMInterUnLock(SMClientID SMinfo); SHAREMEMORY_CLIENT_C_API unsigned long SMInterLockExchange(SMClientID SMinfo, unsigned long offset, unsigned long timeout); SHAREMEMORY_CLIENT_C_API bool SMInterUnLockExchange(SMClientID SMinfo, unsigned long offset); SHAREMEMORY_CLIENT_C_API unsigned long SMLockSMCCtrl(SMClientID SMinfo, unsigned long timeout); SHAREMEMORY_CLIENT_C_API bool SMUnLockSMCCtrl(SMClientID SMinfo); SHAREMEMORY_CLIENT_C_API bool ShareMemory_ClientStart(void); SHAREMEMORY_CLIENT_C_API bool ShareMemory_ClientStop(void); #endif // SHARE_MEMORY_CLIENT_H