Marcus Meissner schreef:
On Tue, Jul 05, 2005 at 10:16:08PM +0200, Felix Nawothnig wrote:
Marcus Meissner wrote:
I wonder how I can do this cleaner (Meaning no compiler warnings without ugly hacks). Also I would like to know how to call a function like __thiscall_fnTextSrv_TxSendMessage, because some methods I need are implemented in windows' stdcall. And I would like to know wether include/textserv.h needs to be adjusted now that I know they are not WINAPI.
Adding "thiscall" to gcc would perhaps help in the long run ... :/ Fun fun fun...
Considering that gcc already knows regparm and we just need regparm(1) with ecx instead eax hacking in "thiscall" for C code shouldn't be too hard I think.
But since this would be a very Wine-specific hack I doubt it would get into GCC. The right way would probably to extend the regparm attribute to allow specifying arbitrary registers...
On second thought... What about abusing the "regparm(3)" attribute for this.
It gets eax, edx, ecx, stackparam1, stackparam2, ...
So what about using a construct like this (cloaked in some macros)?
#define THISCALL0(name,this) __thiscall_#name(int unused_eax,int unused_edx, void *this)
#define THISCALL1(name,this,p1) __thiscall_#name(int unused_eax,int unused_edx, void *this, int p1)
It looks evil, and those functions are not exactly what I want, because I need them in a vtable, which requires them to be something like HRESULT ... fnTextServ_blah(ITextServices *iface, args), I could recast those functions, but that is not exactly a 'clean' solution, adding 'thiscall' to gcc would definitely help a lot. Until gcc supports thiscall, I think it would be easier to just fix the macro's I already have and set attribute 'used' to avoid compiler warnings. But I still wonder what I have to do to call a 'thiscall' function, since I probably need it in ITextHost.
Maarten Lankhorst