Francois Jacques <[EMAIL PROTECTED]> writes:

> +static HRESULT
> +INVOKE_InvokeStdCallFunction(IUnknown*   pIUnk,
> +                             FUNCDESC*   pFuncDesc,
> +                             VARIANTARG* paArgsCoerced,
> +                             VARIANT*    pVarResult,
> +                             EXCEPINFO*  pExcepInfo)
> +{
> +    typedef DWORD  (__stdcall *pDWORDRetFunc) (IUnknown*);   
> +    typedef double (__stdcall *pDoubleRetFunc)(IUnknown*); 
> +
> +    HRESULT hr = E_FAIL;
> +
> +    /* retrieve current stack pointer, keep a copy */
> +#ifdef __GNUC__ 
> +#ifdef __i386__
> +    register DWORD esp asm("esp");
> +#endif 
> +#endif

You absolutely cannot manipulate the stack behind gcc's back. There is
no way this can work except by pure blind luck. You should build the
arguments into a DWORD array and then use a switch statement to pass
the right number of parameters, like we do in relay32/relay386.c.

-- 
Alexandre Julliard
[EMAIL PROTECTED]

Reply via email to