Widl Fixes
Ove Kaaven
ovek at arcticnet.no
Mon Mar 17 03:33:27 CST 2003
lør, 2003-03-15 kl. 13:35 skrev Jon Griffiths:
> Hi,
>
> --- Ove Kaaven <ovek at arcticnet.no> wrote:
> > Could you explain the reason behind the last line, "Don't dump
> > full struct/enum definitions in prototypes", since this shouldn't
> > happen in any case.
>
> The following idl file, "foo.idl", cut down from my oleidl.idl for
> example purposes:
>
> ---------------------------------
> import "objidl.idl";
>
> interface IOleClientSite;
> interface IOleObject;
>
> typedef LPCRECT LPCBORDERWIDTHS;
>
> [
> object,
> uuid(00000112-0000-0000-C000-000000000046)
> ]
> interface IOleObject : IUnknown
> {
> typedef IOleObject* LPOLEOBJECT;
>
> HRESULT DoVerb(
> [in] LONG iVerb,
> [in] struct tagMSG* lpmsg,
> [in] IOleClientSite* pActiveSite,
> [in] LONG lindex,
> [in] HWND hwndParent,
> [in] LPCRECT lprcPosRect);
> }
> ---------------------------------
>
> Produces as its output when run with -b -h:
>
> struct IOleObject: IUnknown {
> virtual HRESULT CALLBACK DoVerb(
> LONG iVerb,
> struct tagMSG {
> HWND hwnd;
> UINT message;
> WPARAM wParam;
> LPARAM lParam;
> DWORD time;
> POINT pt;
> }* lpmsg,
> IOleClientSite* pActiveSite,
> LONG lindex,
> HWND hwndParent,
> LPCRECT lprcPosRect) = 0;
>
> } ICOM_COM_INTERFACE_ATTRIBUTE;
Oh I see now... struct tagMSG is defined in an imported idl file so it
won't be written out while processing ocidl, and thus t->written remains
FALSE even though it's properly defined. The best way to solve this
would still be to ensure that t->written is TRUE, by changing the
parser.y line
if (!parse_only) write_typedef($$, $4);
into something that will still set the "written" field of the type (and
its embedded structures) even if parse_only is true (and similarly with
the enumdefs, structdefs, uniondefs, and interfacedefs, probably). A new
parameter to write_type/write_typedef which inhibits writing anything to
the header but still sets "written", for example... would that work?
More information about the wine-devel
mailing list