mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 22:23:01 +00:00
Git conversion: Make reactos the root directory, move rosapps, rostests, wallpapers into modules, and delete rossubsys.
This commit is contained in:
parent
b94e2d8ca0
commit
c2c66aff7d
24198 changed files with 0 additions and 37285 deletions
305
sdk/lib/atl/atlcore.h
Normal file
305
sdk/lib/atl/atlcore.h
Normal file
|
@ -0,0 +1,305 @@
|
|||
/*
|
||||
* ReactOS ATL
|
||||
*
|
||||
* Copyright 2009 Andrew Hill <ash77@reactos.org>
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <malloc.h>
|
||||
|
||||
#define WIN32_NO_STATUS
|
||||
#define _INC_WINDOWS
|
||||
#define COM_NO_WINDOWS_H
|
||||
#include <stdarg.h>
|
||||
#include <windef.h>
|
||||
#include <winbase.h>
|
||||
#include <winreg.h>
|
||||
#include <winnls.h>
|
||||
#include <ole2.h>
|
||||
#include <olectl.h>
|
||||
#include <crtdbg.h>
|
||||
|
||||
#ifndef ATLASSERT
|
||||
#define ATLASSERT(expr) _ASSERTE(expr)
|
||||
#endif // ATLASSERT
|
||||
|
||||
namespace ATL
|
||||
{
|
||||
|
||||
class CComCriticalSection
|
||||
{
|
||||
public:
|
||||
CRITICAL_SECTION m_sec;
|
||||
public:
|
||||
CComCriticalSection()
|
||||
{
|
||||
memset(&m_sec, 0, sizeof(CRITICAL_SECTION));
|
||||
}
|
||||
|
||||
virtual ~CComCriticalSection()
|
||||
{
|
||||
}
|
||||
|
||||
HRESULT Lock()
|
||||
{
|
||||
EnterCriticalSection(&m_sec);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT Unlock()
|
||||
{
|
||||
LeaveCriticalSection(&m_sec);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT Init()
|
||||
{
|
||||
InitializeCriticalSection(&m_sec);
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT Term()
|
||||
{
|
||||
DeleteCriticalSection(&m_sec);
|
||||
return S_OK;
|
||||
}
|
||||
};
|
||||
|
||||
class CComFakeCriticalSection
|
||||
{
|
||||
public:
|
||||
HRESULT Lock()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT Unlock()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT Init()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT Term()
|
||||
{
|
||||
return S_OK;
|
||||
}
|
||||
};
|
||||
|
||||
class CComAutoCriticalSection : public CComCriticalSection
|
||||
{
|
||||
public:
|
||||
CComAutoCriticalSection()
|
||||
{
|
||||
HRESULT hResult __MINGW_ATTRIB_UNUSED;
|
||||
|
||||
hResult = CComCriticalSection::Init();
|
||||
ATLASSERT(SUCCEEDED(hResult));
|
||||
}
|
||||
~CComAutoCriticalSection()
|
||||
{
|
||||
CComCriticalSection::Term();
|
||||
}
|
||||
};
|
||||
|
||||
class CComSafeDeleteCriticalSection : public CComCriticalSection
|
||||
{
|
||||
private:
|
||||
bool m_bInitialized;
|
||||
public:
|
||||
CComSafeDeleteCriticalSection()
|
||||
{
|
||||
m_bInitialized = false;
|
||||
}
|
||||
|
||||
~CComSafeDeleteCriticalSection()
|
||||
{
|
||||
Term();
|
||||
}
|
||||
|
||||
HRESULT Lock()
|
||||
{
|
||||
ATLASSERT(m_bInitialized);
|
||||
return CComCriticalSection::Lock();
|
||||
}
|
||||
|
||||
HRESULT Init()
|
||||
{
|
||||
HRESULT hResult;
|
||||
|
||||
ATLASSERT(!m_bInitialized);
|
||||
hResult = CComCriticalSection::Init();
|
||||
if (SUCCEEDED(hResult))
|
||||
m_bInitialized = true;
|
||||
return hResult;
|
||||
}
|
||||
|
||||
HRESULT Term()
|
||||
{
|
||||
if (!m_bInitialized)
|
||||
return S_OK;
|
||||
m_bInitialized = false;
|
||||
return CComCriticalSection::Term();
|
||||
}
|
||||
};
|
||||
|
||||
class CComAutoDeleteCriticalSection : public CComSafeDeleteCriticalSection
|
||||
{
|
||||
private:
|
||||
// CComAutoDeleteCriticalSection::Term should never be called
|
||||
HRESULT Term();
|
||||
};
|
||||
|
||||
struct _ATL_BASE_MODULE70
|
||||
{
|
||||
UINT cbSize;
|
||||
HINSTANCE m_hInst;
|
||||
HINSTANCE m_hInstResource;
|
||||
bool m_bNT5orWin98;
|
||||
DWORD dwAtlBuildVer;
|
||||
GUID *pguidVer;
|
||||
CRITICAL_SECTION m_csResource;
|
||||
#ifdef NOTYET
|
||||
CSimpleArray<HINSTANCE> m_rgResourceInstance;
|
||||
#endif
|
||||
};
|
||||
typedef _ATL_BASE_MODULE70 _ATL_BASE_MODULE;
|
||||
|
||||
class CAtlBaseModule : public _ATL_BASE_MODULE
|
||||
{
|
||||
public :
|
||||
static bool m_bInitFailed;
|
||||
public:
|
||||
CAtlBaseModule()
|
||||
{
|
||||
cbSize = sizeof(_ATL_BASE_MODULE);
|
||||
GetModuleHandleExW(GET_MODULE_HANDLE_EX_FLAG_FROM_ADDRESS, (LPCWSTR)this, &m_hInst);
|
||||
m_hInstResource = m_hInst;
|
||||
}
|
||||
|
||||
HINSTANCE GetModuleInstance()
|
||||
{
|
||||
return m_hInst;
|
||||
}
|
||||
|
||||
HINSTANCE GetResourceInstance()
|
||||
{
|
||||
return m_hInstResource;
|
||||
}
|
||||
|
||||
HINSTANCE SetResourceInstance(HINSTANCE hInst)
|
||||
{
|
||||
return static_cast< HINSTANCE >(InterlockedExchangePointer((void**)&m_hInstResource, hInst));
|
||||
}
|
||||
|
||||
HINSTANCE GetHInstanceAt(int i);
|
||||
};
|
||||
|
||||
extern CAtlBaseModule _AtlBaseModule;
|
||||
|
||||
|
||||
///
|
||||
// String Resource helper functions
|
||||
//
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(push)
|
||||
#pragma warning(disable:4200)
|
||||
#endif
|
||||
struct ATLSTRINGRESOURCEIMAGE
|
||||
{
|
||||
WORD nLength;
|
||||
WCHAR achString[];
|
||||
};
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning(pop)
|
||||
#endif
|
||||
|
||||
inline const ATLSTRINGRESOURCEIMAGE* _AtlGetStringResourceImage(
|
||||
_In_ HINSTANCE hInstance,
|
||||
_In_ HRSRC hResource,
|
||||
_In_ UINT id)
|
||||
{
|
||||
const ATLSTRINGRESOURCEIMAGE* pImage;
|
||||
const ATLSTRINGRESOURCEIMAGE* pImageEnd;
|
||||
ULONG nResourceSize;
|
||||
HGLOBAL hGlobal;
|
||||
UINT iIndex;
|
||||
|
||||
hGlobal = ::LoadResource(hInstance, hResource);
|
||||
if (hGlobal == NULL) return NULL;
|
||||
|
||||
pImage = (const ATLSTRINGRESOURCEIMAGE*)::LockResource(hGlobal);
|
||||
if (pImage == NULL) return NULL;
|
||||
|
||||
nResourceSize = ::SizeofResource(hInstance, hResource);
|
||||
pImageEnd = (const ATLSTRINGRESOURCEIMAGE*)(LPBYTE(pImage) + nResourceSize);
|
||||
iIndex = id & 0x000f;
|
||||
|
||||
while ((iIndex > 0) && (pImage < pImageEnd))
|
||||
{
|
||||
pImage = (const ATLSTRINGRESOURCEIMAGE*)(LPBYTE(pImage) + (sizeof(ATLSTRINGRESOURCEIMAGE) + (pImage->nLength * sizeof(WCHAR))));
|
||||
iIndex--;
|
||||
}
|
||||
|
||||
if (pImage >= pImageEnd) return NULL;
|
||||
if (pImage->nLength == 0) return NULL;
|
||||
|
||||
return pImage;
|
||||
}
|
||||
|
||||
inline const ATLSTRINGRESOURCEIMAGE* AtlGetStringResourceImage(
|
||||
_In_ HINSTANCE hInstance,
|
||||
_In_ UINT id) throw()
|
||||
{
|
||||
HRSRC hResource;
|
||||
hResource = ::FindResourceW(hInstance, MAKEINTRESOURCEW((((id >> 4) + 1) & static_cast<WORD>(~0))), (LPWSTR)RT_STRING);
|
||||
if (hResource == NULL) return NULL;
|
||||
return _AtlGetStringResourceImage(hInstance, hResource, id);
|
||||
}
|
||||
|
||||
inline const ATLSTRINGRESOURCEIMAGE* AtlGetStringResourceImage(
|
||||
_In_ HINSTANCE hInstance,
|
||||
_In_ UINT id,
|
||||
_In_ WORD wLanguage)
|
||||
{
|
||||
HRSRC hResource;
|
||||
hResource = ::FindResourceExW(hInstance, (LPWSTR)RT_STRING, MAKEINTRESOURCEW((((id >> 4) + 1) & static_cast<WORD>(~0))), wLanguage);
|
||||
if (hResource == NULL) return NULL;
|
||||
return _AtlGetStringResourceImage(hInstance, hResource, id);
|
||||
}
|
||||
|
||||
inline HINSTANCE AtlFindStringResourceInstance(
|
||||
UINT nID,
|
||||
WORD wLanguage = 0)
|
||||
{
|
||||
const ATLSTRINGRESOURCEIMAGE* strRes = NULL;
|
||||
HINSTANCE hInst = _AtlBaseModule.GetHInstanceAt(0);
|
||||
|
||||
for (int i = 1; hInst != NULL && strRes == NULL; hInst = _AtlBaseModule.GetHInstanceAt(i++))
|
||||
{
|
||||
strRes = AtlGetStringResourceImage(hInst, nID, wLanguage);
|
||||
if (strRes != NULL) return hInst;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
}; // namespace ATL
|
Loading…
Add table
Add a link
Reference in a new issue