📄 myobexsink.cpp
字号:
//======================================================================
// MyObexSink - A lightweight COM class to receive obex notifications.
//
// Written for the book Programming Windows CE
// Copyright (C) 2003 Douglas Boling
//======================================================================
class MyObexSink : public IObexSink {
private:
HWND m_hWnd;
int m_lRef;
public:
// Constructor
MyObexSink(HWND hWnd) {
m_hWnd = hWnd;
m_lRef = 0;
}
// Destructor
~MyObexSink() {}
//
// Notify - Callback from Obex code. Must return quick so no
// real work done here.
//
HRESULT STDMETHODCALLTYPE Notify (OBEX_EVENT Event, IUnknown *pUnk1,
IUnknown *pUnk2)
{
if (IsWindow (m_hWnd)) {
// Inc the cnt of unk1 so it'll stay around.
pUnk1->AddRef();
PostMessage (m_hWnd, MYMSG_OBEXEVENT, (WPARAM)Event,
(LPARAM)pUnk1);
}
return S_OK;
}
HRESULT STDMETHODCALLTYPE QueryInterface (REFIID riid, LPVOID *ppv)
{
// If caller wants our IUnknown or IClassFactory object,
// return a pointer to the object.
if (IsEqualIID (riid, IID_IUnknown) ||
IsEqualIID (riid, IID_IObexSink)) {
// Return pointer to object.
*ppv = (IConnectionPoint *)this;
AddRef(); // Increment ref
return NOERROR;
}
*ppv = NULL;
return (E_NOINTERFACE);
}
ULONG STDMETHODCALLTYPE AddRef () {
ULONG cnt = (ULONG)InterlockedIncrement ((long *)&m_lRef);
return cnt;
}
ULONG STDMETHODCALLTYPE Release () {
ULONG cnt;
cnt = (ULONG)InterlockedDecrement ((long *)&m_lRef);
if (cnt == 0) {
delete this;
return 0;
}
return cnt;
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -