struct versioning
- From: "Pres" <invalid.email@xxxxxxxx>
- Date: Tue, 29 Apr 2008 21:54:58 +0530
Noticed that several windows API's take a size parameter.
i.e. one of the members of the struct is dwSize which is supposed
to be initialized by client code, by taking the sizeof of the struct.
I assume this is to enable versioning of structures
/* first version of struct */
typedef struct { int dwSize; type1 t1; } A;
/* 2nd version of struct in new version of the library */
typedef struct { int dwSize; type1 t1; } A_v1; // Old struct renamed to
A_v1
typedef struct { int dwSize; type1 t1; type 2;} A;
So their implementation of function will look like
// Impl in v1 of Lib
void fn(A * ptr) { /* Implementation */ }
//Impl in v2 of lib
void fn_v1(A_v1 * ptr) { /* Renamed old fn to fn_v1 - Implementation */
void fn(A * ptr)
{
if (ptr->dwSize == sizeof(A_v1)
{
fn_v1(); return;
}
/* New Implementation Below */
}
Is my assumption correct - is this something like what they would
be doing?
Is this fully standard compliant or are they taking liberties with their
close knowledge of the internals of the compiler.
Assume lib_v1 is compiled with compiler cl_v1 & lib_v2 is compiled
with compiler cl_v2, then it is safe to assume that sizeof(A_v1) would
be the same when compiled with different versions of the same compiler?
i.e. can sizeof(A_v1) can when compiled with gcc v2 as compared to
gcc v1?
If it cannot, then can it change when compiled by two totally different
compilers?
Any other gotchas?
.
- Follow-Ups:
- Re: struct versioning
- From: Eric Sosman
- Re: struct versioning
- From: shuchaoo@xxxxxxxxx
- Re: struct versioning
- From: Ernie Wright
- Re: struct versioning
- From: Chris Torek
- Re: struct versioning
- Prev by Date: Re: Integer to string conversion
- Next by Date: Re: C is best
- Previous by thread: Blank Post
- Next by thread: Re: struct versioning
- Index(es):
Relevant Pages
|