// 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 SHAREMEMORY_LOCK_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // SHAREMEMORY_LOCK_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifndef SHAREMEMORYLOCK_H #define SHAREMEMORYLOCK_H #ifndef SHAREMEMORY_LOCK_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "ShareMemory_LockX64D.lib") #else #pragma comment(lib, "ShareMemory_LockX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "ShareMemory_LockD.lib") #else #pragma comment(lib, "ShareMemory_Lock.lib") #endif #endif #endif #ifdef SHAREMEMORY_LOCK_EXPORTS #define SHAREMEMORY_LOCK_API __declspec(dllexport) #define SHAREMEMORY_LOCK_C_API extern "C" __declspec(dllexport) #else #define SHAREMEMORY_LOCK_API __declspec(dllimport) #define SHAREMEMORY_LOCK_C_API extern "C" __declspec(dllimport) #endif //#include "ShareMemory_Common.h" class SHAREMEMORY_LOCK_API CShareMemory_Lock { unsigned long m_RefCount; unsigned long volatile* m_pInterLock; HANDLE m_LockHandle; bool TryEnterCriticalSection(DWORD TryCount); void LeaveCriticalSection(); public: CShareMemory_Lock(void); ~CShareMemory_Lock(void); DWORD Thread_Lock(DWORD timeout = INFINITE); void Thread_UnLock(); bool ShareMemoryLock(UINT64 &SMhandle, volatile PVOID pLock, DWORD TryCount); void ShareMemoryUnLock(UINT64 &SMhandle, volatile PVOID pLock, DWORD *pRef); bool ShareMemoryAtomLock(PVOID pLock, DWORD TryCount, UINT64 & value); void ShareMemoryAtomUnLock(PVOID pLock, DWORD *pRef, UINT64 & value); bool ShareMemoryPoolLock(volatile PVOID pLock, DWORD TryCount); void ShareMemoryPoolUnLock(volatile PVOID pLock, DWORD *pRef); }; #endif