// pass information between different programs.
//
MSGQUEUEOPTIONS msg_queue_options;
msg_queue_options.dwSize = sizeof(MSGQUEUEOPTIONS);
msg_queue_options.dwMaxMessages = 0;
msg_queue_options.cbMaxMessage = TEST_BUFFER_SIZE;
msg_queue_options.bReadAccess = TRUE;
msg_queue_options.dwFlags = MSGQUEUE_NOPRECOMMIT;
MsgReadQueue.CreateMsgQueue(lpszName, &msg_queue_options);
//
wchar_t test_text[TEST_BUFFER_SIZE];
ret = WaitForSingleObject(MsgReadQueue, INFINITE);
if (ret == WAIT_OBJECT_0) {
DWORD read_bytes;
DWORD flag;
MsgReadQueue.ReadMsgQueue(test_text, sizeof(wchar_t) * TEST_BUFFER_SIZE, &read_bytes, INFINITE, &flag);
}
// CuMsgQueue.h
class CuMsgQueue
{
HANDLE m_hCreateMsgQueue;
public:
BOOL ReadMsgQueue(LPVOID lpBuffer,
DWORD cbBufferSize,
LPDWORD lpNumberOfBytesRead,
DWORD dwTimeout,
DWORD* pdwFlags);
HANDLE CreateMsgQueue(LPWSTR lpszName,LPMSGQUEUEOPTIONS lpOptions);
BOOL CloseMsgQueue( );
operator HANDLE() const;
CuMsgQueue();
virtual ~CuMsgQueue();
};
// CuMsgQueue.cpp
CuMsgQueue::CuMsgQueue()
:m_hCreateMsgQueue(NULL)
{
}
CuMsgQueue::~CuMsgQueue()
{
CloseMsgQueue();
}
BOOL CuMsgQueue::CloseMsgQueue()
{
return ::CloseMsgQueue(m_hCreateMsgQueue);
}
HANDLE CuMsgQueue::CreateMsgQueue(LPWSTR lpszName, LPMSGQUEUEOPTIONS lpOptions)
{
CloseMsgQueue();
m_hCreateMsgQueue = ::CreateMsgQueue(lpszName, lpOptions);
return m_hCreateMsgQueue;
}
CuMsgQueue::operator HANDLE() const
{ return (HANDLE)(this == NULL ? NULL : m_hCreateMsgQueue); }
BOOL CuMsgQueue::ReadMsgQueue(LPVOID lpBuffer,
DWORD cbBufferSize,
LPDWORD lpNumberOfBytesRead,
DWORD dwTimeout,
DWORD* pdwFlags)
{
return ::ReadMsgQueue(m_hCreateMsgQueue, lpBuffer, cbBufferSize, lpNumberOfBytesRead, dwTimeout, pdwFlags);
}
像這種 MSGQUEUEOPTIONS msg_queue_options; 有結構設定的部份, 實在很想把他包到類別裡, 在使用函式參數傳遞,並且設定部份參數為預設值!
不僅使用起來美觀! 而且還不用特別去查結構!
沒有留言:
張貼留言