"Alec Flett" <[EMAIL PROTECTED]> wrote in message
[EMAIL PROTECTED]">news:[EMAIL PROTECTED]...
> Actually, this is only true when we're talking about concrete classes -
> this is one of the great things about using interfaces (aka "pure
> virtual classes") - the way the functions pointers (i.e. vtable entries)
> are laid out in memory is defined by the interfaces that a class
> implements, independent of the construction of the object itself (i.e.
> member variables) - so you can change the object however you like as
> long as you are going through interfaces.
But inline functions don't have to use the interfaces, they can just mess
with the member variables of the object.
Component X
class foo {
private:
int A;
int B;
public:
inline int getB() {return B}
}
Component Y
int function xx(foo * pFoo);
return pFoo->getB(); //* inline code will just do something like mov ax,
[si]B
}
Component X and Y are compiled together.
Now we change Component X to remove member variable A and re-release it.
Component Y is compiled to expect B in the wrong place. This invisible
linkage doesn't require any exports.
Jon Smirl
[EMAIL PROTECTED]