ShareMemory_Client.h 7.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243
  1. // 下列 ifdef 块是创建使从 DLL 导出更简单的
  2. // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 SHAREMEMORY_CLIENT_EXPORTS
  3. // 符号编译的。在使用此 DLL 的
  4. // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将
  5. // SHAREMEMORY_CLIENT_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的
  6. // 符号视为是被导出的。
  7. #pragma once
  8. #ifdef SHAREMEMORY_CLIENT_EXPORTS
  9. #define SHAREMEMORY_CLIENT_API __declspec(dllexport)
  10. #else
  11. #define SHAREMEMORY_CLIENT_API __declspec(dllimport)
  12. #endif
  13. #ifndef SHAREMEMORY_CLIENT_EXPORTS
  14. #ifdef _WIN64
  15. #ifdef _DEBUG
  16. #pragma comment(lib, "ShareMemory_ClientX64D.lib")
  17. #else
  18. #pragma comment(lib, "ShareMemory_ClientX64.lib")
  19. #endif
  20. #else
  21. #ifdef _DEBUG
  22. #pragma comment(lib, "ShareMemory_ClientD.lib")
  23. #else
  24. #pragma comment(lib, "ShareMemory_Client.lib")
  25. #endif
  26. #endif
  27. #endif
  28. #ifdef SHAREMEMORY_CLIENT_EXPORTS
  29. #define SHAREMEMORY_CLIENT_API __declspec(dllexport)
  30. #define SHAREMEMORY_CLIENT_C_API extern "C" __declspec(dllexport)
  31. #else
  32. #define SHAREMEMORY_CLIENT_API __declspec(dllimport)
  33. #define SHAREMEMORY_CLIENT_C_API extern "C" __declspec(dllimport)
  34. #endif
  35. //#include"ShareMemory_Common.h"
  36. #define PRINTA_TRACE(log,format,...)
  37. #define PRINTA_DEBUG(log,format,...)
  38. #define PRINTA_INFO(log,format,...)
  39. #define PRINTA_WARN(log,format,...)
  40. #define PRINTA_ERROR(log,format,...)
  41. #define PRINTA_FATAL(log,format,...)
  42. class Logger
  43. {};
  44. //SM_IMAGE的属性值均用8字节数据 unsigned long long
  45. const WORD SM_KEY_IMAGE_WIDTH = 0x3001;
  46. const WORD SM_KEY_IMAGE_HEIGHT = 0x3002;
  47. const WORD SM_KEY_IMAGE_BIT = 0x3003;
  48. const WORD SM_KEY_IMAGE_DEADLINE_TOP = 0x3004;
  49. const WORD SM_KEY_IMAGE_DEADLINE_LEFT = 0x3005;
  50. const WORD SM_KEY_IMAGE_DEADLINE_RIGHT = 0x3006;
  51. const WORD SM_KEY_IMAGE_DEADLINE_BOTTOM = 0x3007;
  52. const WORD SM_KEY_IMAGE_TAG = 0x3008;
  53. const WORD SM_KEY_IMAGE_INDEX = 0x3009;
  54. const WORD SM_KEY_IMAGE_YEAR = 0x3010;
  55. const WORD SM_KEY_IMAGE_MONTH = 0x3011;
  56. const WORD SM_KEY_IMAGE_DAY = 0x3012;
  57. const WORD SM_KEY_IMAGE_HOUR = 0x3013;
  58. const WORD SM_KEY_IMAGE_MINUTE = 0x3014;
  59. const WORD SM_KEY_IMAGE_SEC = 0x3015;
  60. const WORD SM_KEY_IMAGE_MILLSEC = 0x3016;
  61. const WORD SM_KEY_IMAGE_XRAYFLAG = 0x3017;
  62. const WORD SM_KEY_IMAGE_LSB = 0x2018;
  63. const WORD SM_KEY_IMAGE_DOSE = 0x2019;
  64. const WORD SM_KEY_IMAGE_PIXELSPACING = 0x201A;
  65. const WORD SM_KEY_IMAGE_PIXELREPRESENTATION = 0x201B;
  66. const WORD SM_KEY_IMAGE_ROTATION = 0x201C;
  67. const WORD SM_KEY_IMAGE_FLIP = 0x201D;
  68. const WORD SM_KEY_IMAGE_ORIGINX = 0x201E;
  69. const WORD SM_KEY_IMAGE_ORIGINY = 0x201F;
  70. const WORD SM_KEY_IMAGE_TYPE = 0x2020;
  71. static const char* IMAGE_HEAD = "ImageHead";
  72. static const char* IMAGE_WIDTH = "ImageWidth";
  73. static const char* IMAGE_HEIGHT = "ImageHeight";
  74. static const char* IMAGE_BIT = "ImageBit";
  75. static const char* IMAGE_DEADLINE_TOP = "DeadLineTop";
  76. static const char* IMAGE_DEADLINE_LEFT = "DeadLineLeft";
  77. static const char* IMAGE_DEADLINE_RIGHT = "DeadLineRight";
  78. static const char* IMAGE_DEADLINE_BOTTOM = "DeadLineBottom";
  79. static const char* IMAGE_TAG = "ImageTag";
  80. static const char* IMAGE_INDEX = "ImageIndex";
  81. static const char* IMAGE_YEAR = "Year";
  82. static const char* IMAGE_MONTH = "Month";
  83. static const char* IMAGE_DAY = "Day";
  84. static const char* IMAGE_HOUR = "Hour";
  85. static const char* IMAGE_MINUTE = "Minute";
  86. static const char* IMAGE_SEC = "Second";
  87. static const char* IMAGE_MILLSEC = "MilliSecond";
  88. static const char* IMAGE_XRAYFLAG = "XrayFlag";
  89. static const char* IMAGE_LSB = "LSB";
  90. static const char* IMAGE_DOSE = "Dose";
  91. static const char* IMAGE_PIXELSPACING = "PixelSpacing";
  92. static const char* IMAGE_PIXELREPRESENTATION = "PixelRepresentation";
  93. static const char* IMAGE_ROTATION = "Rotation";
  94. static const char* IMAGE_FLIP = "Flip";
  95. static const char* IMAGE_ORIGINX = "OriginX";
  96. static const char* IMAGE_ORIGINY = "OriginY";
  97. static const char* IMAGE_TYPE = "Type";
  98. #define IMAGEINFOBLOCKSIZE 2048 //2k大小预留空间,为添加图像头信息。 RAW图在BLOCK最后创建后大小不能变
  99. typedef struct _IMAGE
  100. {
  101. _IMAGE() {
  102. Width = 0;
  103. Height = 0;
  104. Bit = 0;
  105. TopOffset = 0;
  106. LeftOffset = 0;
  107. RightOffset = 0;
  108. BottomOffset = 0;
  109. ImageTag = 0;
  110. ImageIndex = 0;
  111. Year = 0;
  112. Month = 0;
  113. Day = 0;
  114. Hour = 0;
  115. Minute = 0;
  116. Second = 0;
  117. MillonSecond = 0;
  118. LSB = 0;
  119. Dose = 0;
  120. pData = NULL;
  121. PixelSpacing = 0;
  122. PixelRepresentation = 0;
  123. Rotation = 0;
  124. Flip = 0;
  125. OriginX = 0;
  126. OriginY = 0;
  127. Type = 0;
  128. };
  129. ~_IMAGE() {
  130. };
  131. unsigned short Width;
  132. unsigned short Height;
  133. unsigned short Bit;
  134. unsigned short TopOffset;
  135. unsigned short LeftOffset;
  136. unsigned short RightOffset;
  137. unsigned short BottomOffset;
  138. unsigned long ImageTag;
  139. unsigned long ImageIndex;
  140. unsigned short Year;
  141. BYTE Month;
  142. BYTE Day;
  143. BYTE Hour;
  144. BYTE Minute;
  145. BYTE Second;
  146. unsigned short MillonSecond;
  147. float LSB;
  148. float Dose;
  149. char *pData;
  150. float PixelSpacing;
  151. int PixelRepresentation; //0:0000H unsigned integer; 1:0001H 2's complement
  152. int Rotation; //Rotation degree clockwise
  153. int Flip;
  154. int OriginX;
  155. int OriginY;
  156. int Type;
  157. }IMAGE;
  158. typedef enum eSMCreateResult
  159. {
  160. SM_CREATE_FAILED = -1,
  161. SM_CREATE_SUCCESS = 0,
  162. SM_ALREADYEXIST,
  163. }SMCreateResult;
  164. typedef enum eSMOpenResult
  165. {
  166. SM_OPEN_FAILED = -1,
  167. SM_OPEN_SUCCESS = 0 ,
  168. }SMOpenResult;
  169. typedef enum eAccessFlag
  170. {
  171. SM_NOACCESS,
  172. SM_READONLY,
  173. SM_WRITEONLY,
  174. SM_READWRITE,
  175. }SMAccessFlag;
  176. typedef enum _ShareMemory_Type
  177. {
  178. SM_TYPE_BLOCK,
  179. SM_TYPE_CRICLE,
  180. SM_TYPE_QUEUE,
  181. SM_TYPE_MAX
  182. }SHAREMEMORYTYPE;
  183. union SHRAREMEMBLOCKID
  184. {
  185. DWORD dwShareMemBId;
  186. #pragma pack(1)
  187. struct
  188. {
  189. DWORD ShareMemId : 8;
  190. DWORD ResetCount : 8;
  191. DWORD BlockId : 16;
  192. }stShareMemBId;
  193. #pragma pack()
  194. };
  195. #define UnvalidSMBid 0xffffffff
  196. typedef DWORD ShareMemoryBlockID;
  197. typedef PVOID SMClientID;
  198. SHAREMEMORY_CLIENT_C_API int SMCreate(const char * path, int AccessFlags, DWORD size, SMClientID & SMinfo);//create包含open
  199. SHAREMEMORY_CLIENT_C_API bool SMDestroy(const char * path);
  200. SHAREMEMORY_CLIENT_C_API int SMOpen(const char * path, int AccessFlags, SMClientID & SMinfo);
  201. SHAREMEMORY_CLIENT_C_API int SMOpenById(unsigned char &ShareMemId, int AccessFlags, SMClientID & SMinfo);
  202. SHAREMEMORY_CLIENT_C_API bool SMClose(SMClientID SMinfo);
  203. SHAREMEMORY_CLIENT_C_API bool SMLock(SMClientID SMinfo, int timeout);
  204. SHAREMEMORY_CLIENT_C_API bool SMUnLock(SMClientID SMinfo);
  205. SHAREMEMORY_CLIENT_C_API bool SMSetSize(SMClientID SMinfo, DWORD size);
  206. SHAREMEMORY_CLIENT_C_API DWORD SMGetSize(SMClientID SMinfo);
  207. SHAREMEMORY_CLIENT_C_API bool SMWrite(SMClientID SMinfo, LPVOID buff, DWORD size);
  208. SHAREMEMORY_CLIENT_C_API bool SMRead(SMClientID SMinfo, LPVOID buff, DWORD size);
  209. SHAREMEMORY_CLIENT_C_API bool SMSeek(SMClientID SMinfo, DWORD position);
  210. SHAREMEMORY_CLIENT_C_API bool SMWriteEx(SMClientID SMinfo, DWORD position, LPVOID buff, DWORD size);
  211. SHAREMEMORY_CLIENT_C_API bool SMReadEx(SMClientID SMinfo, DWORD position, LPVOID buff, DWORD size);
  212. SHAREMEMORY_CLIENT_C_API bool SMSetSMCCtrl(SMClientID SMinfo, LPVOID buff, DWORD size);
  213. SHAREMEMORY_CLIENT_C_API bool SMGetSMCCtrl(SMClientID SMinfo, LPVOID buff, DWORD size);
  214. SHAREMEMORY_CLIENT_C_API LPVOID SMGetSMCCtrlAddress(SMClientID SMinfo);
  215. SHAREMEMORY_CLIENT_C_API LPVOID SMGetSMDataAddr(SMClientID SMCid, DWORD & DataSize);
  216. SHAREMEMORY_CLIENT_C_API DWORD SMInterLock(SMClientID SMinfo, DWORD timeout);
  217. SHAREMEMORY_CLIENT_C_API bool SMInterUnLock(SMClientID SMinfo);
  218. SHAREMEMORY_CLIENT_C_API DWORD SMInterLockExchange(SMClientID SMinfo, DWORD offset, DWORD timeout);
  219. SHAREMEMORY_CLIENT_C_API bool SMInterUnLockExchange(SMClientID SMinfo, DWORD offset);
  220. SHAREMEMORY_CLIENT_C_API DWORD SMLockSMCCtrl(SMClientID SMinfo, DWORD timeout);
  221. SHAREMEMORY_CLIENT_C_API bool SMUnLockSMCCtrl(SMClientID SMinfo);
  222. SHAREMEMORY_CLIENT_C_API bool ShareMemory_ClientStart(void);
  223. SHAREMEMORY_CLIENT_C_API bool ShareMemory_ClientStop(void);