Try and compile everything explicitly with /vmg /vmv (or /vmg /vmm if you
use MI, but not virtual inheritance). Look at the help for both compiler
options for more background.
Ronald Laeremans
Visual C++ team
"Hendrik Schober" <SpamTrap@gmx.de> wrote in message
news:ejIZmxnhDHA.1696@TK2MSFTNGP09.phx.gbl...[color=blue]
> "Hendrik Schober" <SpamTrap@gmx.de> wrote:[color=green]
> > Hi,
> >
> > we just run into the problem, that "default" alignment
> > in the project properies dialog seem to be different.
> > We have a project that's a DLL, which is linked with
> > a couple of LIBs. All are with the same solution. All
> > had "Default" set in the "Struct Member Alignment"
> > entry.
> > After some assembler debugging we found out that a
> > struct member that is a member function pointer in
> > one of the LIBs was expected at a different position
> > than in the DLL.
> > Setting the alignment to /Zp4 in all projects made
> > the problem disappear.
> > [...][/color]
>
> Unfortunately, it didn't make it disappear,
> it just changed the problem, so that it arose
> somewhere else.
> We have been further investigating this. So
> here's an update.
>
> We compile a bunch of code into a LIB file and
> link this into our executable. (The code isn't
> ours.)
> It seems as if pointers to member functions are
> aligned differently in the LIB than in the EXE,
> even though all compiler settings are the same.
> (We checked this several times.)
>
> Assuming I want to use pointers to a struct's
> members within a table like this
>
> const TTestStruct c::sm_TestEntries[] = {
> { 1, 2, 3, &c::f1, &var},
> { 4, 5, 6, &c::f1, &var},
> { 0, 0, 0, 0, 0}
> };
>
> using default alignment I end up with this
> memory layout (all in 4byte words):
>
> 0001 0002 0003 0000 &f1 0000 0000 0000 &var
> 0004 0005 0006 0000 &f1 0000 0000 0000 &var
> 0000 0000 0000 0000 0000 0000 0000 0000 0000
>
> Using 4byte alignment (/Zp4) I get this:
>
> 0001 0002 0003 &f1 0000 0000 0000 &var
> 0004 0005 0006 &f1 0000 0000 0000 &var
> 0000 0000 0000 0000 0000 0000 0000 0000
>
> So far, so good. However, in the LIB I get
> this:
>
> 0001 0002 0003 &f1 &var
> 0004 0005 0006 &f1 &var
> 0000 0000 0000 0000 0000
>
> no matter what the alignment is set to.
> I know that smells as if the alignment is set
> explicitely somewhere within the code. However,
> there's a few things against this:
> 1. Despite intensive search by three people
> (including me), we didn't find any.
> 2. It used to work with VC6.
> 3. A '#pragma pack(show)' at the appropriate
> places showed identical values for LIB and
> EXE.
> While I would argue about #1, probably even #2,
> #3 seems to indicate that there isn't any packing
> manipulation done.
> We haven't been able to come up with a repro case
> and the code in question is rather big. So we
> merely are still blindly stumbling around,
> searching for something to start with.
> Any ideas out there about that?
>
> Schobi
>
> --
>
SpamTrap@gmx.de is never read
> I'm Schobi at suespammers org
>
> "And why should I know better by now/When I'm old enough not to?"
> Beth Orton
>
>[/color]