Hi, I've a small question on using 'import' in .idl. Sorry if it's too dummy, it's my first try to use widl. Trying to get commoncontrols.idl port compile on Wine I've got the following problems - this file contains struct definitions already defined in commctrl.h.
Adding
import "commctrl.h"
and removing after that all conflict definitions from commoncontrols.idl caused for me
../tools/widl/widl -I. -I. -I../include -I../include -h -H commoncontrols.h commoncontrols.idl ./prsht.h:39: error: syntax error, unexpected '{' make[1]: *** [commoncontrols.h] Error 1 make[1]: Leaving directory `/home/mrlarch/wine/include' make: *** [include] Error 2
showing that prsht.h isn't processed properly here
39 static const WCHAR WC_PROPSHEETW[] = { 'S','y','s', 40 'P','r','o','p','e','r','t','y','S','h','e','e','t',0 };
How could I get over that?
2009/1/11 Nikolay Sivov bunglehead@gmail.com:
Hi, I've a small question on using 'import' in .idl. Sorry if it's too dummy, it's my first try to use widl. Trying to get commoncontrols.idl port compile on Wine I've got the following problems - this file contains struct definitions already defined in commctrl.h.
Adding
import "commctrl.h"
and removing after that all conflict definitions from commoncontrols.idl caused for me
../tools/widl/widl -I. -I. -I../include -I../include -h -H commoncontrols.h commoncontrols.idl ./prsht.h:39: error: syntax error, unexpected '{' make[1]: *** [commoncontrols.h] Error 1 make[1]: Leaving directory `/home/mrlarch/wine/include' make: *** [include] Error 2
showing that prsht.h isn't processed properly here
39 static const WCHAR WC_PROPSHEETW[] = { 'S','y','s', 40 'P','r','o','p','e','r','t','y','S','h','e','e','t',0 };
How could I get over that?
The IDL syntax that widl implements includes a subset of the C syntax, however it is not practical to support the full C syntax (in particular inline functions) and in this case widl doesn't like the array initialiser. MIDL probably also suffers from similar limitations and you'll see "#ifndef MIDL_PASS" in PSDK header files to work around these sorts of issues. If you really have to treat commctrl.h as an IDL file, you'll need to #ifdef out problem statements.
Rob Shearman wrote:
2009/1/11 Nikolay Sivov bunglehead@gmail.com:
Hi, I've a small question on using 'import' in .idl. Sorry if it's too dummy, it's my first try to use widl. Trying to get commoncontrols.idl port compile on Wine I've got the following problems - this file contains struct definitions already defined in commctrl.h.
Adding
import "commctrl.h"
and removing after that all conflict definitions from commoncontrols.idl caused for me
../tools/widl/widl -I. -I. -I../include -I../include -h -H commoncontrols.h commoncontrols.idl ./prsht.h:39: error: syntax error, unexpected '{' make[1]: *** [commoncontrols.h] Error 1 make[1]: Leaving directory `/home/mrlarch/wine/include' make: *** [include] Error 2
showing that prsht.h isn't processed properly here
39 static const WCHAR WC_PROPSHEETW[] = { 'S','y','s', 40 'P','r','o','p','e','r','t','y','S','h','e','e','t',0 };
How could I get over that?
The IDL syntax that widl implements includes a subset of the C syntax, however it is not practical to support the full C syntax (in particular inline functions) and in this case widl doesn't like the array initialiser. MIDL probably also suffers from similar limitations and you'll see "#ifndef MIDL_PASS" in PSDK header files to work around these sorts of issues. If you really have to treat commctrl.h as an IDL file, you'll need to #ifdef out problem statements.
Thanks for reply. I've already compiled it without any changes in commctrl.h. As I understood #ifdef MIDL_PASS used as #if 0 to provide definitions in idl file for MIDL without conflicting with other C sources.