spec file syntax for VARIANT parameter
In order to implement OleLoadPictureFile and OleLoadPictureFileEx, it will be necessary to change their entries in oleaut32.spec from stub to stdcall. The stdcall syntax wants a list of parameter types, which puts these functions in an unususal situation: they take a VARIANT (which is a struct, in case anyone is not familiar) by value as their first parameter. There does not seem to be any type defined in the spec file that fits this situation. I have been using ptr in my last couple of patches which add stub implementations for these functions, but when I tried to build this on cygwin I got errors like: undefined reference to `_OleLoadPictureFileEx(a)20' undefined reference to `_OleLoadPictureFile(a)8' Looking at the functions that are present in the .o file, I see they are really _OleLoadPictureFileEx(a)32 and _OleLoadPictureFile(a)20. Changing the spec file to list each VARIANT as 4 longs fixes these errors. My question is, should my next version of the patch list the VARIANT as 4 longs, or is there some better way to specify this that I'm not aware of? If not, is there a comment syntax for the spec file where I can explain why there are 4 long params where there should be one VARIANT? Thanks Jeremy
On Wed, Nov 19, 2008 at 01:11:05PM -0800, Jeremy Drake wrote:
In order to implement OleLoadPictureFile and OleLoadPictureFileEx, it will be necessary to change their entries in oleaut32.spec from stub to stdcall. The stdcall syntax wants a list of parameter types, which puts these functions in an unususal situation: they take a VARIANT (which is a struct, in case anyone is not familiar) by value as their first parameter. There does not seem to be any type defined in the spec file that fits this situation. I have been using ptr in my last couple of patches which add stub implementations for these functions, but when I tried to build this on cygwin I got errors like: undefined reference to `_OleLoadPictureFileEx(a)20' undefined reference to `_OleLoadPictureFile(a)8'
Hmm, use as much "long" specifiers to fit the VARIANT struct (number of bytes/4). I think VARIANT has 16 byte, so use "long long long long".
My question is, should my next version of the patch list the VARIANT as 4 longs, or is there some better way to specify this that I'm not aware of? If not, is there a comment syntax for the spec file where I can explain why there are 4 long params where there should be one VARIANT?
Currently no other way. Ciao, Marcus
participants (2)
-
Jeremy Drake -
Marcus Meissner