// 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 SHAREMEMORY_CLIENT_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // SHAREMEMORY_CLIENT_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #pragma once #ifdef SHAREMEMORY_CLIENT_EXPORTS #define SHAREMEMORY_CLIENT_API __declspec(dllexport) #else #define SHAREMEMORY_CLIENT_API __declspec(dllimport) #endif #ifndef SHAREMEMORY_CLIENT_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "ShareMemory_ClientX64D.lib") #else #pragma comment(lib, "ShareMemory_ClientX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "ShareMemory_ClientD.lib") #else #pragma comment(lib, "ShareMemory_Client.lib") #endif #endif #endif #ifdef SHAREMEMORY_CLIENT_EXPORTS #define SHAREMEMORY_CLIENT_API __declspec(dllexport) #define SHAREMEMORY_CLIENT_C_API extern "C" __declspec(dllexport) #else #define SHAREMEMORY_CLIENT_API __declspec(dllimport) #define SHAREMEMORY_CLIENT_C_API extern "C" __declspec(dllimport) #endif //#include"ShareMemory_Common.h" #define PRINTA_TRACE(log,format,...) #define PRINTA_DEBUG(log,format,...) #define PRINTA_INFO(log,format,...) #define PRINTA_WARN(log,format,...) #define PRINTA_ERROR(log,format,...) #define PRINTA_FATAL(log,format,...) class Logger {}; //SM_IMAGE的属性值均用8字节数据 unsigned long long const WORD SM_KEY_IMAGE_WIDTH = 0x3001; const WORD SM_KEY_IMAGE_HEIGHT = 0x3002; const WORD SM_KEY_IMAGE_BIT = 0x3003; const WORD SM_KEY_IMAGE_DEADLINE_TOP = 0x3004; const WORD SM_KEY_IMAGE_DEADLINE_LEFT = 0x3005; const WORD SM_KEY_IMAGE_DEADLINE_RIGHT = 0x3006; const WORD SM_KEY_IMAGE_DEADLINE_BOTTOM = 0x3007; const WORD SM_KEY_IMAGE_TAG = 0x3008; const WORD SM_KEY_IMAGE_INDEX = 0x3009; const WORD SM_KEY_IMAGE_YEAR = 0x3010; const WORD SM_KEY_IMAGE_MONTH = 0x3011; const WORD SM_KEY_IMAGE_DAY = 0x3012; const WORD SM_KEY_IMAGE_HOUR = 0x3013; const WORD SM_KEY_IMAGE_MINUTE = 0x3014; const WORD SM_KEY_IMAGE_SEC = 0x3015; const WORD SM_KEY_IMAGE_MILLSEC = 0x3016; const WORD SM_KEY_IMAGE_XRAYFLAG = 0x3017; const WORD SM_KEY_IMAGE_LSB = 0x2018; const WORD SM_KEY_IMAGE_DOSE = 0x2019; const WORD SM_KEY_IMAGE_PIXELSPACING = 0x201A; const WORD SM_KEY_IMAGE_PIXELREPRESENTATION = 0x201B; const WORD SM_KEY_IMAGE_ROTATION = 0x201C; const WORD SM_KEY_IMAGE_FLIP = 0x201D; const WORD SM_KEY_IMAGE_ORIGINX = 0x201E; const WORD SM_KEY_IMAGE_ORIGINY = 0x201F; const WORD SM_KEY_IMAGE_TYPE = 0x2020; static const char* IMAGE_HEAD = "ImageHead"; static const char* IMAGE_WIDTH = "ImageWidth"; static const char* IMAGE_HEIGHT = "ImageHeight"; static const char* IMAGE_BIT = "ImageBit"; static const char* IMAGE_DEADLINE_TOP = "DeadLineTop"; static const char* IMAGE_DEADLINE_LEFT = "DeadLineLeft"; static const char* IMAGE_DEADLINE_RIGHT = "DeadLineRight"; static const char* IMAGE_DEADLINE_BOTTOM = "DeadLineBottom"; static const char* IMAGE_TAG = "ImageTag"; static const char* IMAGE_INDEX = "ImageIndex"; static const char* IMAGE_YEAR = "Year"; static const char* IMAGE_MONTH = "Month"; static const char* IMAGE_DAY = "Day"; static const char* IMAGE_HOUR = "Hour"; static const char* IMAGE_MINUTE = "Minute"; static const char* IMAGE_SEC = "Second"; static const char* IMAGE_MILLSEC = "MilliSecond"; static const char* IMAGE_XRAYFLAG = "XrayFlag"; static const char* IMAGE_LSB = "LSB"; static const char* IMAGE_DOSE = "Dose"; static const char* IMAGE_PIXELSPACING = "PixelSpacing"; static const char* IMAGE_PIXELREPRESENTATION = "PixelRepresentation"; static const char* IMAGE_ROTATION = "Rotation"; static const char* IMAGE_FLIP = "Flip"; static const char* IMAGE_ORIGINX = "OriginX"; static const char* IMAGE_ORIGINY = "OriginY"; static const char* IMAGE_TYPE = "Type"; #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; BYTE Month; BYTE Day; BYTE Hour; BYTE Minute; BYTE 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 { DWORD dwShareMemBId; #pragma pack(1) struct { DWORD ShareMemId : 8; DWORD ResetCount : 8; DWORD BlockId : 16; }stShareMemBId; #pragma pack() }; #define UnvalidSMBid 0xffffffff typedef DWORD ShareMemoryBlockID; typedef PVOID SMClientID; SHAREMEMORY_CLIENT_C_API int SMCreate(const char * path, int AccessFlags, DWORD 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, DWORD size); SHAREMEMORY_CLIENT_C_API DWORD SMGetSize(SMClientID SMinfo); SHAREMEMORY_CLIENT_C_API bool SMWrite(SMClientID SMinfo, LPVOID buff, DWORD size); SHAREMEMORY_CLIENT_C_API bool SMRead(SMClientID SMinfo, LPVOID buff, DWORD size); SHAREMEMORY_CLIENT_C_API bool SMSeek(SMClientID SMinfo, DWORD position); SHAREMEMORY_CLIENT_C_API bool SMWriteEx(SMClientID SMinfo, DWORD position, LPVOID buff, DWORD size); SHAREMEMORY_CLIENT_C_API bool SMReadEx(SMClientID SMinfo, DWORD position, LPVOID buff, DWORD size); SHAREMEMORY_CLIENT_C_API bool SMSetSMCCtrl(SMClientID SMinfo, LPVOID buff, DWORD size); SHAREMEMORY_CLIENT_C_API bool SMGetSMCCtrl(SMClientID SMinfo, LPVOID buff, DWORD size); SHAREMEMORY_CLIENT_C_API LPVOID SMGetSMCCtrlAddress(SMClientID SMinfo); SHAREMEMORY_CLIENT_C_API LPVOID SMGetSMDataAddr(SMClientID SMCid, DWORD & DataSize); SHAREMEMORY_CLIENT_C_API DWORD SMInterLock(SMClientID SMinfo, DWORD timeout); SHAREMEMORY_CLIENT_C_API bool SMInterUnLock(SMClientID SMinfo); SHAREMEMORY_CLIENT_C_API DWORD SMInterLockExchange(SMClientID SMinfo, DWORD offset, DWORD timeout); SHAREMEMORY_CLIENT_C_API bool SMInterUnLockExchange(SMClientID SMinfo, DWORD offset); SHAREMEMORY_CLIENT_C_API DWORD SMLockSMCCtrl(SMClientID SMinfo, DWORD 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);