// 下列 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" //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; #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; }; ~_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 }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);