ShareMemory_Client.h 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  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. //SM_IMAGE的属性值均用8字节数据 unsigned long long
  37. const WORD SM_KEY_IMAGE_WIDTH = 0x3001;
  38. const WORD SM_KEY_IMAGE_HEIGHT = 0x3002;
  39. const WORD SM_KEY_IMAGE_BIT = 0x3003;
  40. const WORD SM_KEY_IMAGE_DEADLINE_TOP = 0x3004;
  41. const WORD SM_KEY_IMAGE_DEADLINE_LEFT = 0x3005;
  42. const WORD SM_KEY_IMAGE_DEADLINE_RIGHT = 0x3006;
  43. const WORD SM_KEY_IMAGE_DEADLINE_BOTTOM = 0x3007;
  44. const WORD SM_KEY_IMAGE_TAG = 0x3008;
  45. const WORD SM_KEY_IMAGE_INDEX = 0x3009;
  46. const WORD SM_KEY_IMAGE_YEAR = 0x3010;
  47. const WORD SM_KEY_IMAGE_MONTH = 0x3011;
  48. const WORD SM_KEY_IMAGE_DAY = 0x3012;
  49. const WORD SM_KEY_IMAGE_HOUR = 0x3013;
  50. const WORD SM_KEY_IMAGE_MINUTE = 0x3014;
  51. const WORD SM_KEY_IMAGE_SEC = 0x3015;
  52. const WORD SM_KEY_IMAGE_MILLSEC = 0x3016;
  53. const WORD SM_KEY_IMAGE_XRAYFLAG = 0x3017;
  54. const WORD SM_KEY_IMAGE_LSB = 0x2018;
  55. const WORD SM_KEY_IMAGE_DOSE = 0x2019;
  56. const WORD SM_KEY_IMAGE_PIXELSPACING = 0x201A;
  57. const WORD SM_KEY_IMAGE_PIXELREPRESENTATION = 0x201B;
  58. #define IMAGEINFOBLOCKSIZE 2048 //2k大小预留空间,为添加图像头信息。 RAW图在BLOCK最后创建后大小不能变
  59. typedef struct _IMAGE
  60. {
  61. _IMAGE() {
  62. Width = 0;
  63. Height = 0;
  64. Bit = 0;
  65. TopOffset = 0;
  66. LeftOffset = 0;
  67. RightOffset = 0;
  68. BottomOffset = 0;
  69. ImageTag = 0;
  70. ImageIndex = 0;
  71. Year = 0;
  72. Month = 0;
  73. Day = 0;
  74. Hour = 0;
  75. Minute = 0;
  76. Second = 0;
  77. MillonSecond = 0;
  78. LSB = 0;
  79. Dose = 0;
  80. pData = NULL;
  81. PixelSpacing = 0;
  82. PixelRepresentation = 0;
  83. };
  84. ~_IMAGE() {
  85. };
  86. unsigned short Width;
  87. unsigned short Height;
  88. unsigned short Bit;
  89. unsigned short TopOffset;
  90. unsigned short LeftOffset;
  91. unsigned short RightOffset;
  92. unsigned short BottomOffset;
  93. unsigned long ImageTag;
  94. unsigned long ImageIndex;
  95. unsigned short Year;
  96. BYTE Month;
  97. BYTE Day;
  98. BYTE Hour;
  99. BYTE Minute;
  100. BYTE Second;
  101. unsigned short MillonSecond;
  102. float LSB;
  103. float Dose;
  104. char *pData;
  105. float PixelSpacing;
  106. int PixelRepresentation; //0:0000H unsigned integer; 1:0001H 2's complement
  107. }IMAGE;
  108. typedef enum eSMCreateResult
  109. {
  110. SM_CREATE_FAILED = -1,
  111. SM_CREATE_SUCCESS = 0,
  112. SM_ALREADYEXIST,
  113. }SMCreateResult;
  114. typedef enum eSMOpenResult
  115. {
  116. SM_OPEN_FAILED = -1,
  117. SM_OPEN_SUCCESS = 0 ,
  118. }SMOpenResult;
  119. typedef enum eAccessFlag
  120. {
  121. SM_NOACCESS,
  122. SM_READONLY,
  123. SM_WRITEONLY,
  124. SM_READWRITE,
  125. }SMAccessFlag;
  126. typedef enum _ShareMemory_Type
  127. {
  128. SM_TYPE_BLOCK,
  129. SM_TYPE_CRICLE,
  130. SM_TYPE_QUEUE,
  131. SM_TYPE_MAX
  132. }SHAREMEMORYTYPE;
  133. union SHRAREMEMBLOCKID
  134. {
  135. DWORD dwShareMemBId;
  136. #pragma pack(1)
  137. struct
  138. {
  139. DWORD ShareMemId : 8;
  140. DWORD ResetCount : 8;
  141. DWORD BlockId : 16;
  142. }stShareMemBId;
  143. #pragma pack()
  144. };
  145. #define UnvalidSMBid 0xffffffff
  146. typedef DWORD ShareMemoryBlockID;
  147. typedef PVOID SMClientID;
  148. SHAREMEMORY_CLIENT_C_API int SMCreate(const char * path, int AccessFlags, DWORD size, SMClientID & SMinfo);//create包含open
  149. SHAREMEMORY_CLIENT_C_API bool SMDestroy(const char * path);
  150. SHAREMEMORY_CLIENT_C_API int SMOpen(const char * path, int AccessFlags, SMClientID & SMinfo);
  151. SHAREMEMORY_CLIENT_C_API int SMOpenById(unsigned char &ShareMemId, int AccessFlags, SMClientID & SMinfo);
  152. SHAREMEMORY_CLIENT_C_API bool SMClose(SMClientID SMinfo);
  153. SHAREMEMORY_CLIENT_C_API bool SMLock(SMClientID SMinfo, int timeout);
  154. SHAREMEMORY_CLIENT_C_API bool SMUnLock(SMClientID SMinfo);
  155. SHAREMEMORY_CLIENT_C_API bool SMSetSize(SMClientID SMinfo, DWORD size);
  156. SHAREMEMORY_CLIENT_C_API DWORD SMGetSize(SMClientID SMinfo);
  157. SHAREMEMORY_CLIENT_C_API bool SMWrite(SMClientID SMinfo, LPVOID buff, DWORD size);
  158. SHAREMEMORY_CLIENT_C_API bool SMRead(SMClientID SMinfo, LPVOID buff, DWORD size);
  159. SHAREMEMORY_CLIENT_C_API bool SMSeek(SMClientID SMinfo, DWORD position);
  160. SHAREMEMORY_CLIENT_C_API bool SMWriteEx(SMClientID SMinfo, DWORD position, LPVOID buff, DWORD size);
  161. SHAREMEMORY_CLIENT_C_API bool SMReadEx(SMClientID SMinfo, DWORD position, LPVOID buff, DWORD size);
  162. SHAREMEMORY_CLIENT_C_API bool SMSetSMCCtrl(SMClientID SMinfo, LPVOID buff, DWORD size);
  163. SHAREMEMORY_CLIENT_C_API bool SMGetSMCCtrl(SMClientID SMinfo, LPVOID buff, DWORD size);
  164. SHAREMEMORY_CLIENT_C_API LPVOID SMGetSMCCtrlAddress(SMClientID SMinfo);
  165. SHAREMEMORY_CLIENT_C_API LPVOID SMGetSMDataAddr(SMClientID SMCid, DWORD & DataSize);
  166. SHAREMEMORY_CLIENT_C_API DWORD SMInterLock(SMClientID SMinfo, DWORD timeout);
  167. SHAREMEMORY_CLIENT_C_API bool SMInterUnLock(SMClientID SMinfo);
  168. SHAREMEMORY_CLIENT_C_API DWORD SMInterLockExchange(SMClientID SMinfo, DWORD offset, DWORD timeout);
  169. SHAREMEMORY_CLIENT_C_API bool SMInterUnLockExchange(SMClientID SMinfo, DWORD offset);
  170. SHAREMEMORY_CLIENT_C_API DWORD SMLockSMCCtrl(SMClientID SMinfo, DWORD timeout);
  171. SHAREMEMORY_CLIENT_C_API bool SMUnLockSMCCtrl(SMClientID SMinfo);
  172. SHAREMEMORY_CLIENT_C_API bool ShareMemory_ClientStart(void);
  173. SHAREMEMORY_CLIENT_C_API bool ShareMemory_ClientStop(void);