16 #pragma warning(disable: 4705) 26 CRITICAL_SECTION m_CritSec;
42 InitializeCriticalSection(&m_CritSec);
46 DeleteCriticalSection(&m_CritSec);
50 EnterCriticalSection(&m_CritSec);
54 LeaveCriticalSection(&m_CritSec);
70 BOOL WINAPI CritCheckIn(
CCritSec * pcCrit);
71 BOOL WINAPI CritCheckIn(
const CCritSec * pcCrit);
72 BOOL WINAPI CritCheckOut(
CCritSec * pcCrit);
73 BOOL WINAPI CritCheckOut(
const CCritSec * pcCrit);
74 void WINAPI DbgLockTrace(
CCritSec * pcCrit, BOOL fTrace);
76 #define CritCheckIn(x) TRUE 77 #define CritCheckOut(x) TRUE 78 #define DbgLockTrace(pc, fT) 120 CAMEvent(BOOL fManualReset = FALSE);
124 operator HANDLE ()
const {
return m_hEvent; };
126 void Set() {EXECUTE_ASSERT(SetEvent(m_hEvent));};
127 BOOL Wait(DWORD dwTimeout = INFINITE) {
128 return (WaitForSingleObject(m_hEvent, dwTimeout) == WAIT_OBJECT_0);
130 void Reset() { ResetEvent(m_hEvent); };
131 BOOL Check() {
return Wait(0); };
145 BOOL WaitMsg(DWORD dwTimeout = INFINITE);
149 #define CTimeoutEvent CAMEvent 160 CAMThread &operator=(
const CAMThread &refThread);
173 virtual DWORD ThreadProc() = 0;
177 virtual ~CAMThread();
184 static DWORD WINAPI InitialThreadProc(LPVOID pv);
191 DWORD CallWorker(DWORD);
196 #pragma warning( push ) 200 #pragma warning( disable : 4312 ) 201 HANDLE hThread = (HANDLE)InterlockedExchangePointer(&m_hThread, 0);
202 #pragma warning( pop ) 205 WaitForSingleObject(hThread, INFINITE);
206 CloseHandle(hThread);
212 BOOL ThreadExists(
void)
const 214 if (m_hThread == 0) {
225 BOOL CheckRequest(DWORD * pParam);
232 HANDLE GetRequestHandle()
const {
return m_EventSend; };
235 DWORD GetRequestParam()
const {
return m_dwParam; };
239 static HRESULT CoInitializeHelper();
256 #define DEFAULT_QUEUESIZE 2 262 CRITICAL_SECTION CritSect;
268 void Initialize(
int n) {
269 iNextPut = iNextGet = 0;
271 InitializeCriticalSection(&CritSect);
272 hSemPut = CreateSemaphore(NULL, n, n, NULL);
273 hSemGet = CreateSemaphore(NULL, 0, n, NULL);
274 QueueObjects =
new T[n];
284 Initialize(DEFAULT_QUEUESIZE);
288 delete [] QueueObjects;
289 DeleteCriticalSection(&CritSect);
290 CloseHandle(hSemPut);
291 CloseHandle(hSemGet);
302 WaitForSingleObject(hSemGet, INFINITE);
304 EnterCriticalSection(&CritSect);
305 iSlot = iNextGet++ % nMax;
306 Object = QueueObjects[iSlot];
307 LeaveCriticalSection(&CritSect);
312 ReleaseSemaphore(hSemPut, 1L, &lPrevious);
316 void PutQueueObject(T Object) {
323 WaitForSingleObject(hSemPut, INFINITE);
325 EnterCriticalSection(&CritSect);
326 iSlot = iNextPut++ % nMax;
327 QueueObjects[iSlot] = Object;
328 LeaveCriticalSection(&CritSect);
333 ReleaseSemaphore(hSemGet, 1L, &lPrevious);
376 #define wsprintfW wsprintfWInternal 377 #define lstrcpyW lstrcpyWInternal 378 #define lstrcpynW lstrcpynWInternal 379 #define lstrcmpW lstrcmpWInternal 380 #define lstrcmpiW lstrcmpiWInternal 381 #define lstrlenW lstrlenWInternal 385 void * __stdcall memmoveInternal(
void *,
const void *,
size_t);
387 inline void * __cdecl memchrInternal(
const void *buf,
int chr,
size_t cnt)
407 while ( cnt && (*(
unsigned char *)buf != (
unsigned char)chr) ) {
408 buf = (
unsigned char *)buf + 1;
412 return(cnt ? (
void *)buf : NULL);
416 void WINAPI IntToWstr(
int i, LPWSTR wstr,
size_t len);
418 #define WstrToInt(sz) _wtoi(sz) 419 #define atoiW(sz) _wtoi(sz) 420 #define atoiA(sz) atoi(sz) 424 extern const DWORD bits555[3];
425 extern const DWORD bits565[3];
426 extern const DWORD bits888[3];
430 STDAPI_(
const GUID) GetTrueColorType(
const BITMAPINFOHEADER *pbmiHeader);
431 STDAPI_(
const GUID) GetBitmapSubtype(
const BITMAPINFOHEADER *pbmiHeader);
432 STDAPI_(WORD) GetBitCount(
const GUID *pSubtype);
439 STDAPI_(CHAR *) GetSubtypeNameA(
const GUID *pSubtype);
440 STDAPI_(WCHAR *) GetSubtypeNameW(
const GUID *pSubtype);
443 #define GetSubtypeName GetSubtypeNameW 445 #define GetSubtypeName GetSubtypeNameA 448 STDAPI_(LONG) GetBitmapFormatSize(
const BITMAPINFOHEADER *pHeader);
449 STDAPI_(DWORD) GetBitmapSize(
const BITMAPINFOHEADER *pHeader);
450 STDAPI_(BOOL) ContainsPalette(
const VIDEOINFOHEADER *pVideoInfo);
451 STDAPI_(
const RGBQUAD *) GetBitmapPalette(
const VIDEOINFOHEADER *pVideoInfo);
455 BOOL WINAPI IsEqualObject(IUnknown *pFirst, IUnknown *pSecond);
458 #define EqualPins(pPin1, pPin2) IsEqualObject(pPin1, pPin2) 464 LONGLONG WINAPI llMulDiv(LONGLONG a, LONGLONG b, LONGLONG c, LONGLONG rnd);
465 LONGLONG WINAPI Int64x32Div32(LONGLONG a, LONG b, LONG c, LONG rnd);
469 STDAPI WriteBSTR(BSTR * pstrDest, LPCWSTR szSrc);
470 STDAPI FreeBSTR(BSTR* pstr);
477 STDAPI AMGetWideString(LPCWSTR pszString, LPWSTR *ppszReturn);
480 DWORD WINAPI WaitDispatchingMessages(
485 HANDLE hEvent = NULL);
491 #define AmHresultFromWin32(x) (MAKE_HRESULT(SEVERITY_ERROR, FACILITY_WIN32, x)) 495 HRESULT AmGetLastErrorToHResult(
void);
499 IUnknown* QzAtlComPtrAssign(IUnknown** pp, IUnknown* lp);
509 if ((p = lp) != NULL)
514 if ((p = lp.p) != NULL)
518 void Release() {
if (p) p->Release(); p=NULL;}
519 operator T*() {
return (T*)p;}
520 T& operator*() {ASSERT(p!=NULL);
return *p; }
523 T** operator&() { ASSERT(p==NULL);
return &p; }
524 T* operator->() { ASSERT(p!=NULL);
return p; }
525 T* operator=(T* lp){
return (T*)QzAtlComPtrAssign((IUnknown**)&p, lp);}
528 return (T*)QzAtlComPtrAssign((IUnknown**)&p, lp.p);
531 bool operator!(){
return (p == NULL);}
533 BOOL operator!(){
return (p == NULL) ? TRUE : FALSE;}
538 MMRESULT CompatibleTimeSetEvent( UINT uDelay, UINT uResolution, LPTIMECALLBACK lpTimeProc, DWORD_PTR dwUser, UINT fuEvent );
539 bool TimeKillSynchronousFlagAvailable(
void );