On 10/03/2012 09:49 PM, Dan Kegel wrote: > The main challenge was figuring out how to get the variable > list of arguments off the stack, and then put them back onto > the stack when calling the provided function pointer. > This bit of varargs hackery can't be done in pure C as far as I > can tell, so I used assembly. > I started programming in machine language long ago, > so getting that working wasn't too hard once I > realized that's what was needed. Getting it to pass the > Alexandre test is another matter.
> Alexandre did give feedback on one earlier iteration of > the patch, telling me I was re-inventing the wheel, so I > tossed my old assembly and copied the helper-calling code > nearly verbatim from call_method in oleaut32/typelib.c I haven't studied assembly in a while, and I've never looked at this part of Wine before, but every once in a while, a silly question from a novice doesn't hurt. I'm just wondering is assembly definitely needed? This is just based on some googling and skimming through StackOverflow, but it sounds like you can still use va_list on amd64. It just takes some tweaking: http://stackoverflow.com/questions/8047362 One method involves a "va_copy" macro, but that may only apply to C99 or later: https://forums.oracle.com/forums/message.jspa?messageID=8536520 The other solution mentioned just involves wrapping va_list inside a struct, as mentioned in the top answer of the first link. I don't know if that helps or if I'm totally misunderstanding the problem. - Kyle