// 下列 ifdef 块是创建使从 DLL 导出更简单的 // 宏的标准方法。此 DLL 中的所有文件都是用命令行上定义的 SHAREMEMORY_IMAGE_EXPORTS // 符号编译的。在使用此 DLL 的 // 任何其他项目上不应定义此符号。这样,源文件中包含此文件的任何其他项目都会将 // SHAREMEMORY_IMAGE_API 函数视为是从 DLL 导入的,而此 DLL 则将用此宏定义的 // 符号视为是被导出的。 #ifdef SHAREMEMORY_IMAGE_EXPORTS #define SHAREMEMORY_IMAGE_API __declspec(dllexport) #else #define SHAREMEMORY_IMAGE_API __declspec(dllimport) #endif #ifndef SHAREMEMORY_IMAGE_EXPORTS #ifdef _WIN64 #ifdef _DEBUG #pragma comment(lib, "ShareMemory_ImageX64D.lib") #else #pragma comment(lib, "ShareMemory_ImageX64.lib") #endif #else #ifdef _DEBUG #pragma comment(lib, "ShareMemory_ImageD.lib") #else #pragma comment(lib, "ShareMemory_Image.lib") #endif #endif #endif #ifdef SHAREMEMORY_IMAGE_EXPORTS #define SHAREMEMORY_IMAGE_API __declspec(dllexport) #define SHAREMEMORY_IMAGE_C_API extern "C" __declspec(dllexport) #else #define SHAREMEMORY_IMAGE_API __declspec(dllimport) #define SHAREMEMORY_IMAGE_C_API extern "C" __declspec(dllimport) #endif #include "ShareMemory_Block.h" // 此类是从 ShareMemory_Image.dll 导出的 class SHAREMEMORY_IMAGE_API CShareMemory_Image : public CShareMemory_Block { DWORD m_nImagePacketPoint;//包含info和data DWORD m_nImageInfoSize; DWORD m_nImageRawSize; DWORD m_nImageBlockSize;//Image申请的全部block大小 DWORD m_Bid; unsigned char * m_pImageBlockBuff;//保存此ImageBlock对应共享内存的首地址 bool ImageBlockWrite(LPVOID buff, DWORD size); bool ImageBlockRead(LPVOID buff, DWORD size); bool AddImageSequeue(unsigned long long seqid, unsigned long long frameid); bool SetImageSequeue(unsigned long long seqid, unsigned long long frameid); bool GetImageSequeue(unsigned long long & seqid, unsigned long long & frameid); public: CShareMemory_Image(); ~CShareMemory_Image(); DWORD SizeOfImageBlock(); DWORD SizeOfImageRaw(); DWORD SizeOfImageInfo(); //第一步SetImageDataSize,生成整个ImageBlock的大小 bool SetImageDataSize(unsigned long long width, unsigned long long height, unsigned long long bits, unsigned long long top, unsigned long long bottom, unsigned long long left, unsigned long long right); //第二步创建ImageBlock * N 大小的circle。调用ShareMemoryBlockSet,将获得此ImageBlock对应共享内存的首地址。在此之后,其他函数才能正常工作。 virtual bool ShareMemoryBlockSet(DWORD Bid, int AccessFlags); //bool CreateImageDataBuff(); bool ReadImageData(LPVOID & buff, DWORD & size); bool WriteImageData(LPVOID buff, DWORD size); bool ReadImageHeadandData(LPVOID & buff, DWORD & size); bool WriteImageHeadandData(LPVOID buff, DWORD size); bool AddImageFullSize(unsigned long long width, unsigned long long height, unsigned long long bits); bool AddImageTrim(unsigned long long top, unsigned long long bottom, unsigned long long left, unsigned long long right); bool AddImagetime(SYSTEMTIME st); bool AddImageXrayflag(unsigned long long flag); bool SetImageFullSize(unsigned long long width, unsigned long long height, unsigned long long bits); bool SetImageTrim(unsigned long long top, unsigned long long bottom, unsigned long long left, unsigned long long right); bool SetImagetime(SYSTEMTIME st); bool SetImageXrayflag(unsigned long long flag); bool GetImageFullSize(unsigned long long & width, unsigned long long & height, unsigned long long & bits); bool GetImageTrim(unsigned long long & top, unsigned long long & bottom, unsigned long long & left, unsigned long long & right); bool GetImagetime(SYSTEMTIME & st); bool GetImageXrayflag(unsigned long long & flag); bool AddImageHeadInfo(unsigned short key, unsigned long long &Val); bool SetImageHeadInfo(unsigned short key, unsigned long long &Val); bool GetImageHeadInfo(unsigned short key, unsigned long long &Val); bool SetImageId(unsigned long long id); bool GetImageId(unsigned long long & id); DWORD GetImageBlockId(); };