On 09/04/2008, Francois Gouget <[email protected]> wrote: > On Mon, 24 Mar 2008, Alexandre Julliard wrote: > [...] > > Commit: ae32a7fe0473aebb875b26083c1567ff046c3b80 > > URL: > http://source.winehq.org/git/wine.git/?a=commit;h=ae32a7fe0473aebb875b26083c1567ff046c3b80 > > > > Author: Reece Dunn <[email protected]> > > Date: Sat Mar 22 22:50:43 2008 +0000 > > > > comdlg32: Fix building the tests with MSVC headers. > [...] > > +++ b/dlls/comdlg32/tests/printdlg.c > > @@ -26,6 +26,7 @@ > > #include "winerror.h" > > #include "wingdi.h" > > #include "winuser.h" > > +#include "objbase.h" > > The question is why didn't this fail in Wine in the first place? The > Wine headers must be different in some way which causes the compile to > succeed when it should have failed. Thus they should be fixed.
With the current Vista SDK headers (not sure about older ones), in commdlg.h PRINTDLGEXA/W is wrapped in a #ifdef STDMETHOD guard along with the definition of IPrintDialogCallback, IPrintDialogServices and PRINTPAGERANGE. Thus, using the SDK headers it does not find LPPRINTDLGEXW without objbase.h to get the definition of STDMETHOD. Looking at the Wine headers, the PRINTDLGEXA/W datastructure is not guarded in this way and the lpCallback member is void* not LPUNKNOWN as it is in the SDK headers. - Reece
