
On 10/09/2010 06:19 AM, Joshua Boyce wrote:
So, a definition which does not required the Windows headers would be as follows:
#pragma pack(push, 8)
typedef struct _RTL_CRITICAL_SECTION
{
void* DebugInfo;
long LockCount;
long RecursionCount;
void* OwningThread;
void* LockSemaphore;
void* SpinCount;
} RTL_CRITICAL_SECTION, *PRTL_CRITICAL_SECTION;
#pragma pack(pop)
Suggestion: namespace boost { namespace boost_windows_h { #pragma pack(push, 8) struct RTL_CRITICAL_SECTION { void * reserved1; long reserved2; long reserved3; void * reserved4; void * reserved5; void * reserved6; }; typedef RTL_CRITICAL_SECTION * PRTL_CRITICAL_SECTION; #pragma pack(pop) } } The 'typedef struct' thing is a holdover from C. No reason to keep that struct tag, I don't think intended for use. Leading underscores are reserved for compiler vendors (like Microsoft) and organizations that ship non-standard headers (like Microsoft). The field data seems to change with OS versions, so code is not supposed to rely on it. The fields are effectively reserved. Personally, I'd use a lowercase struct name (it's not a macro after all) and omit the silly typedef. I'd be less concerned with it looking like the official headers if the point is to not include them. Just re-use the minimum needed for compatibility, which in this case is just sizeof() and __alignof(). - Marsh