This will not compile, because I have ALSO changed MSVCRT_bad_typeid_copy_ctor as it too suffers from the _thiscall issue. (Even if I switch the parms around to account for moving the this to the last parm).
the simplest (and cleanest) way, may be to let the current functions untouched, but change the name in the .spec from. for example cdecl -register ??0bad_typeid@@QAE@ABV0@@Z(ptr) __reg_MSVCRT_bad_typeid_copy_ctor
and in C file, leave MSVCRT_bad_typeid_copy_ctor as it is and implement the __reg functions as:
void __reg_MSVCRT_bad_typeid_copy_ctor(const bad_typeid * rhs, CONTEXT86* context) { MSVCRT_bad_typeid_copy_ctor((bad_typeid *)context->Ecx, rhs); }
that should work... don't forget also that register functions return their result in context->Eax... A+