diff --git a/dlls/msvcrt/cpp.c b/dlls/msvcrt/cpp.c index 6bb322c6f88..d6e57fd2f70 100644 --- a/dlls/msvcrt/cpp.c +++ b/dlls/msvcrt/cpp.c @@ -2,6 +2,7 @@ * msvcrt.dll C++ objects * * Copyright 2000 Jon Griffiths + * Copyright 2003 Alexandre Julliard * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -18,6 +19,9 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include "config.h" +#include "wine/port.h" + #include "msvcrt.h" #include "msvcrt/eh.h" #include "msvcrt/stdlib.h" @@ -29,17 +33,11 @@ WINE_DEFAULT_DEBUG_CHANNEL(msvcrt); typedef void (*v_table_ptr)(); -static v_table_ptr exception_vtable[2]; -static v_table_ptr bad_typeid_vtable[3]; -static v_table_ptr __non_rtti_object_vtable[3]; -static v_table_ptr bad_cast_vtable[3]; -static v_table_ptr type_info_vtable[1]; - typedef struct __exception { v_table_ptr *vtable; - const char *name; - int do_free; /* FIXME: take string copy with char* ctor? */ + char *name; + int do_free; /* take string copy with char* ctor? */ } exception; typedef struct __bad_typeid @@ -94,55 +92,91 @@ typedef struct _rtti_object_locator rtti_object_hierachy *type_hierachy; } rtti_object_locator; + +#ifdef __i386__ /* thiscall functions are i386-specific */ + +#define DEFINE_THISCALL_WRAPPER(func) \ + extern void __thiscall_ ## func(); \ + __ASM_GLOBAL_FUNC(__thiscall_ ## func, \ + "popl %eax\n\t" \ + "pushl %ecx\n\t" \ + "pushl %eax\n\t" \ + "jmp " __ASM_NAME(#func) ) + +v_table_ptr MSVCRT_exception_vtable[]; +v_table_ptr MSVCRT_bad_typeid_vtable[]; +v_table_ptr MSVCRT_bad_cast_vtable[]; +v_table_ptr MSVCRT___non_rtti_object_vtable[]; + /****************************************************************** * ??0exception@@QAE@ABQBD@Z (MSVCRT.@) */ -void MSVCRT_exception_ctor(exception * _this, const char ** name) +DEFINE_THISCALL_WRAPPER(MSVCRT_exception_ctor); +exception * __stdcall MSVCRT_exception_ctor(exception * _this, const char ** name) { TRACE("(%p %s)\n",_this,*name); - _this->vtable = exception_vtable; - _this->name = *name; - TRACE("name = %s\n",_this->name); - _this->do_free = 0; /* FIXME */ + _this->vtable = MSVCRT_exception_vtable; + _this->name = MSVCRT_operator_new(strlen(*name)+1); + if (_this->name) strcpy( _this->name, *name ); + _this->do_free = TRUE; + return _this; } /****************************************************************** * ??0exception@@QAE@ABV0@@Z (MSVCRT.@) */ -void MSVCRT_exception_copy_ctor(exception * _this, const exception * rhs) +DEFINE_THISCALL_WRAPPER(MSVCRT_exception_copy_ctor); +exception * __stdcall MSVCRT_exception_copy_ctor(exception * _this, const exception * rhs) { TRACE("(%p %p)\n",_this,rhs); - if (_this != rhs) - memcpy (_this, rhs, sizeof (*_this)); + _this->vtable = MSVCRT_exception_vtable; + _this->do_free = rhs->do_free; + if (!_this->do_free) _this->name = rhs->name; + else + { + _this->name = MSVCRT_operator_new(strlen(rhs->name)+1); + if (_this->name) strcpy( _this->name, rhs->name ); + } TRACE("name = %s\n",_this->name); + return _this; } /****************************************************************** * ??0exception@@QAE@XZ (MSVCRT.@) */ -void MSVCRT_exception_default_ctor(exception * _this) +DEFINE_THISCALL_WRAPPER(MSVCRT_exception_default_ctor); +exception * __stdcall MSVCRT_exception_default_ctor(exception * _this) { TRACE("(%p)\n",_this); - _this->vtable = exception_vtable; - _this->name = ""; - _this->do_free = 0; /* FIXME */ + _this->vtable = MSVCRT_exception_vtable; + _this->name = NULL; + _this->do_free = FALSE; + return _this; } /****************************************************************** * ??1exception@@UAE@XZ (MSVCRT.@) */ -void MSVCRT_exception_dtor(exception * _this) +DEFINE_THISCALL_WRAPPER(MSVCRT_exception_dtor); +void __stdcall MSVCRT_exception_dtor(exception * _this) { TRACE("(%p)\n",_this); + _this->vtable = MSVCRT_exception_vtable; + if (_this->do_free) MSVCRT_operator_delete(_this->name); } /****************************************************************** * ??4exception@@QAEAAV0@ABV0@@Z (MSVCRT.@) */ -exception * MSVCRT_exception_opequals(exception * _this, const exception * rhs) +DEFINE_THISCALL_WRAPPER(MSVCRT_exception_opequals); +exception * __stdcall MSVCRT_exception_opequals(exception * _this, const exception * rhs) { TRACE("(%p %p)\n",_this,rhs); - memcpy (_this, rhs, sizeof (*_this)); + if (_this != rhs) + { + MSVCRT_exception_dtor(_this); + MSVCRT_exception_copy_ctor(_this, rhs); + } TRACE("name = %s\n",_this->name); return _this; } @@ -150,32 +184,383 @@ exception * MSVCRT_exception_opequals(exception * _this, const exception * rhs) /****************************************************************** * ??_Eexception@@UAEPAXI@Z (MSVCRT.@) */ -void * MSVCRT_exception__unknown_E(exception * _this, unsigned int arg1) +DEFINE_THISCALL_WRAPPER(MSVCRT_exception_vector_dtor); +void * __stdcall MSVCRT_exception_vector_dtor(exception * _this, unsigned int flags) { - TRACE("(%p %d)\n",_this,arg1); - _purecall(); - return NULL; + TRACE("(%p %x)\n",_this,flags); + if (flags & 2) + { + /* we have an array, with the number of elements stored before the first object */ + int i, *ptr = (int *)_this - 1; + + for (i = *ptr - 1; i >= 0; i--) MSVCRT_exception_dtor(_this + i); + MSVCRT_operator_delete(ptr); + } + else + { + MSVCRT_exception_dtor(_this); + if (flags & 1) MSVCRT_operator_delete(_this); + } + return _this; } /****************************************************************** * ??_Gexception@@UAEPAXI@Z (MSVCRT.@) */ -void * MSVCRT_exception__unknown_G(exception * _this, unsigned int arg1) +DEFINE_THISCALL_WRAPPER(MSVCRT_exception_scalar_dtor); +void * __stdcall MSVCRT_exception_scalar_dtor(exception * _this, unsigned int flags) { - TRACE("(%p %d)\n",_this,arg1); - _purecall(); - return NULL; + TRACE("(%p %x)\n",_this,flags); + MSVCRT_exception_dtor(_this); + if (flags & 1) MSVCRT_operator_delete(_this); + return _this; } /****************************************************************** * ?what@exception@@UBEPBDXZ (MSVCRT.@) */ -const char * MSVCRT_what_exception(exception * _this) +DEFINE_THISCALL_WRAPPER(MSVCRT_what_exception); +const char * __stdcall MSVCRT_what_exception(exception * _this) +{ + TRACE("(%p) returning %s\n",_this,_this->name); + return _this->name ? _this->name : "Unknown exception"; +} + +/****************************************************************** + * ??0bad_typeid@@QAE@ABV0@@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_bad_typeid_copy_ctor); +bad_typeid * __stdcall MSVCRT_bad_typeid_copy_ctor(bad_typeid * _this, const bad_typeid * rhs) +{ + TRACE("(%p %p)\n",_this,rhs); + MSVCRT_exception_copy_ctor(&_this->base,&rhs->base); + _this->base.vtable = MSVCRT_bad_typeid_vtable; + return _this; +} + +/****************************************************************** + * ??0bad_typeid@@QAE@PBD@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_bad_typeid_ctor); +bad_typeid * __stdcall MSVCRT_bad_typeid_ctor(bad_typeid * _this, const char * name) +{ + TRACE("(%p %s)\n",_this,name); + MSVCRT_exception_ctor(&_this->base, &name); + _this->base.vtable = MSVCRT_bad_typeid_vtable; + return _this; +} + +/****************************************************************** + * ??1bad_typeid@@UAE@XZ (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_bad_typeid_dtor); +void __stdcall MSVCRT_bad_typeid_dtor(bad_typeid * _this) +{ + TRACE("(%p)\n",_this); + MSVCRT_exception_dtor(&_this->base); +} + +/****************************************************************** + * ??4bad_typeid@@QAEAAV0@ABV0@@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_bad_typeid_opequals); +bad_typeid * __stdcall MSVCRT_bad_typeid_opequals(bad_typeid * _this, const bad_typeid * rhs) +{ + TRACE("(%p %p)\n",_this,rhs); + MSVCRT_exception_opequals(&_this->base,&rhs->base); + return _this; +} + +/****************************************************************** + * ??_Ebad_typeid@@UAEPAXI@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_bad_typeid_vector_dtor); +void * __stdcall MSVCRT_bad_typeid_vector_dtor(bad_typeid * _this, unsigned int flags) +{ + TRACE("(%p %x)\n",_this,flags); + if (flags & 2) + { + /* we have an array, with the number of elements stored before the first object */ + int i, *ptr = (int *)_this - 1; + + for (i = *ptr - 1; i >= 0; i--) MSVCRT_bad_typeid_dtor(_this + i); + MSVCRT_operator_delete(ptr); + } + else + { + MSVCRT_bad_typeid_dtor(_this); + if (flags & 1) MSVCRT_operator_delete(_this); + } + return _this; +} + +/****************************************************************** + * ??_Gbad_typeid@@UAEPAXI@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_bad_typeid_scalar_dtor); +void * __stdcall MSVCRT_bad_typeid_scalar_dtor(bad_typeid * _this, unsigned int flags) +{ + TRACE("(%p %x)\n",_this,flags); + MSVCRT_bad_typeid_dtor(_this); + if (flags & 1) MSVCRT_operator_delete(_this); + return _this; +} + +/****************************************************************** + * ??0__non_rtti_object@@QAE@ABV0@@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT___non_rtti_object_copy_ctor); +__non_rtti_object * __stdcall MSVCRT___non_rtti_object_copy_ctor(__non_rtti_object * _this, + const __non_rtti_object * rhs) +{ + TRACE("(%p %p)\n",_this,rhs); + MSVCRT_bad_typeid_copy_ctor(&_this->base,&rhs->base); + _this->base.base.vtable = MSVCRT___non_rtti_object_vtable; + return _this; +} + +/****************************************************************** + * ??0__non_rtti_object@@QAE@PBD@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT___non_rtti_object_ctor); +__non_rtti_object * __stdcall MSVCRT___non_rtti_object_ctor(__non_rtti_object * _this, + const char * name) +{ + TRACE("(%p %s)\n",_this,name); + MSVCRT_bad_typeid_ctor(&_this->base,name); + _this->base.base.vtable = MSVCRT___non_rtti_object_vtable; + return _this; +} + +/****************************************************************** + * ??1__non_rtti_object@@UAE@XZ (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT___non_rtti_object_dtor); +void __stdcall MSVCRT___non_rtti_object_dtor(__non_rtti_object * _this) +{ + TRACE("(%p)\n",_this); + MSVCRT_bad_typeid_dtor(&_this->base); +} + +/****************************************************************** + * ??4__non_rtti_object@@QAEAAV0@ABV0@@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT___non_rtti_object_opequals); +__non_rtti_object * __stdcall MSVCRT___non_rtti_object_opequals(__non_rtti_object * _this, + const __non_rtti_object *rhs) +{ + TRACE("(%p %p)\n",_this,rhs); + MSVCRT_bad_typeid_opequals( &_this->base, &rhs->base ); + return _this; +} + +/****************************************************************** + * ??_E__non_rtti_object@@UAEPAXI@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT___non_rtti_object_vector_dtor); +void * __stdcall MSVCRT___non_rtti_object_vector_dtor(__non_rtti_object * _this, unsigned int flags) +{ + TRACE("(%p %x)\n",_this,flags); + if (flags & 2) + { + /* we have an array, with the number of elements stored before the first object */ + int i, *ptr = (int *)_this - 1; + + for (i = *ptr - 1; i >= 0; i--) MSVCRT___non_rtti_object_dtor(_this + i); + MSVCRT_operator_delete(ptr); + } + else + { + MSVCRT___non_rtti_object_dtor(_this); + if (flags & 1) MSVCRT_operator_delete(_this); + } + return _this; +} + +/****************************************************************** + * ??_G__non_rtti_object@@UAEPAXI@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT___non_rtti_object_scalar_dtor); +void * __stdcall MSVCRT___non_rtti_object_scalar_dtor(__non_rtti_object * _this, unsigned int flags) +{ + TRACE("(%p %x)\n",_this,flags); + MSVCRT___non_rtti_object_dtor(_this); + if (flags & 1) MSVCRT_operator_delete(_this); + return _this; +} + +/****************************************************************** + * ??0bad_cast@@QAE@ABQBD@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_bad_cast_ctor); +bad_cast * __stdcall MSVCRT_bad_cast_ctor(bad_cast * _this, const char ** name) +{ + TRACE("(%p %s)\n",_this,*name); + MSVCRT_exception_ctor(&_this->base, name); + _this->base.vtable = MSVCRT_bad_cast_vtable; + return _this; +} + +/****************************************************************** + * ??0bad_cast@@QAE@ABV0@@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_bad_cast_copy_ctor); +bad_cast * __stdcall MSVCRT_bad_cast_copy_ctor(bad_cast * _this, const bad_cast * rhs) +{ + TRACE("(%p %p)\n",_this,rhs); + MSVCRT_exception_copy_ctor(&_this->base,&rhs->base); + _this->base.vtable = MSVCRT_bad_cast_vtable; + return _this; +} + +/****************************************************************** + * ??1bad_cast@@UAE@XZ (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_bad_cast_dtor); +void __stdcall MSVCRT_bad_cast_dtor(bad_cast * _this) +{ + TRACE("(%p)\n",_this); + MSVCRT_exception_dtor(&_this->base); +} + +/****************************************************************** + * ??4bad_cast@@QAEAAV0@ABV0@@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_bad_cast_opequals); +bad_cast * __stdcall MSVCRT_bad_cast_opequals(bad_cast * _this, const bad_cast * rhs) +{ + TRACE("(%p %p)\n",_this,rhs); + MSVCRT_exception_opequals(&_this->base,&rhs->base); + return _this; +} + +/****************************************************************** + * ??_Ebad_cast@@UAEPAXI@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_bad_cast_vector_dtor); +void * __stdcall MSVCRT_bad_cast_vector_dtor(bad_cast * _this, unsigned int flags) +{ + TRACE("(%p %x)\n",_this,flags); + if (flags & 2) + { + /* we have an array, with the number of elements stored before the first object */ + int i, *ptr = (int *)_this - 1; + + for (i = *ptr - 1; i >= 0; i--) MSVCRT_bad_cast_dtor(_this + i); + MSVCRT_operator_delete(ptr); + } + else + { + MSVCRT_bad_cast_dtor(_this); + if (flags & 1) MSVCRT_operator_delete(_this); + } + return _this; +} + +/****************************************************************** + * ??_Gbad_cast@@UAEPAXI@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_bad_cast_scalar_dtor); +void * __stdcall MSVCRT_bad_cast_scalar_dtor(bad_cast * _this, unsigned int flags) +{ + TRACE("(%p %x)\n",_this,flags); + MSVCRT_bad_cast_dtor(_this); + if (flags & 1) MSVCRT_operator_delete(_this); + return _this; +} + +/****************************************************************** + * ??8type_info@@QBEHABV0@@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_type_info_opequals_equals); +int __stdcall MSVCRT_type_info_opequals_equals(type_info * _this, const type_info * rhs) +{ + int ret = !strcmp(_this->name,rhs->name); + TRACE("(%p %p) returning %d\n",_this,rhs,ret); + return ret; +} + +/****************************************************************** + * ??9type_info@@QBEHABV0@@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_type_info_opnot_equals); +int __stdcall MSVCRT_type_info_opnot_equals(type_info * _this, const type_info * rhs) +{ + int ret = !!strcmp(_this->name,rhs->name); + TRACE("(%p %p) returning %d\n",_this,rhs,ret); + return ret; +} + +/****************************************************************** + * ?before@type_info@@QBEHABV1@@Z (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_type_info_before); +int __stdcall MSVCRT_type_info_before(type_info * _this, const type_info * rhs) +{ + int ret = strcmp(_this->name,rhs->name) < 0; + TRACE("(%p %p) returning %d\n",_this,rhs,ret); + return ret; +} + +/****************************************************************** + * ??1type_info@@UAE@XZ (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_type_info_dtor); +void __stdcall MSVCRT_type_info_dtor(type_info * _this) +{ + TRACE("(%p)\n",_this); + if (_this->data) + MSVCRT_free(_this->data); +} + +/****************************************************************** + * ?name@type_info@@QBEPBDXZ (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_type_info_name); +const char * __stdcall MSVCRT_type_info_name(type_info * _this) { TRACE("(%p) returning %s\n",_this,_this->name); return _this->name; } +/****************************************************************** + * ?raw_name@type_info@@QBEPBDXZ (MSVCRT.@) + */ +DEFINE_THISCALL_WRAPPER(MSVCRT_type_info_raw_name); +const char * __stdcall MSVCRT_type_info_raw_name(type_info * _this) +{ + TRACE("(%p) returning %s\n",_this,_this->name); + return _this->name; +} + +/* vtables */ + +v_table_ptr MSVCRT_exception_vtable[2] = +{ + __thiscall_MSVCRT_exception_vector_dtor, + __thiscall_MSVCRT_what_exception +}; + +v_table_ptr MSVCRT_bad_typeid_vtable[2] = +{ + __thiscall_MSVCRT_bad_typeid_vector_dtor, + __thiscall_MSVCRT_what_exception +}; + +v_table_ptr MSVCRT_bad_cast_vtable[2] = +{ + __thiscall_MSVCRT_bad_cast_vector_dtor, + __thiscall_MSVCRT_what_exception +}; + +v_table_ptr MSVCRT___non_rtti_object_vtable[2] = +{ + __thiscall_MSVCRT___non_rtti_object_vector_dtor, + __thiscall_MSVCRT_what_exception +}; + +#endif /* __i386__ */ + /****************************************************************** * ?set_terminate@@YAP6AXXZP6AXXZ@Z (MSVCRT.@) @@ -233,192 +618,6 @@ void MSVCRT_unexpected(void) MSVCRT_terminate(); } - -/****************************************************************** - * ??0bad_typeid@@QAE@ABV0@@Z (MSVCRT.@) - */ -void MSVCRT_bad_typeid_copy_ctor(bad_typeid * _this, const bad_typeid * rhs) -{ - TRACE("(%p %p)\n",_this,rhs); - MSVCRT_exception_copy_ctor(&_this->base,&rhs->base); -} - -/****************************************************************** - * ??0bad_typeid@@QAE@PBD@Z (MSVCRT.@) - */ -void MSVCRT_bad_typeid_ctor(bad_typeid * _this, const char * name) -{ - TRACE("(%p %s)\n",_this,name); - MSVCRT_exception_ctor(&_this->base, &name); - _this->base.vtable = bad_typeid_vtable; -} - -/****************************************************************** - * ??1bad_typeid@@UAE@XZ (MSVCRT.@) - */ -void MSVCRT_bad_typeid_dtor(bad_typeid * _this) -{ - TRACE("(%p)\n",_this); - MSVCRT_exception_dtor(&_this->base); -} - -/****************************************************************** - * ??4bad_typeid@@QAEAAV0@ABV0@@Z (MSVCRT.@) - */ -bad_typeid * MSVCRT_bad_typeid_opequals(bad_typeid * _this, const bad_typeid * rhs) -{ - TRACE("(%p %p)\n",_this,rhs); - MSVCRT_exception_copy_ctor(&_this->base,&rhs->base); - return _this; -} - -/****************************************************************** - * ??0__non_rtti_object@@QAE@ABV0@@Z (MSVCRT.@) - */ -void MSVCRT___non_rtti_object_copy_ctor(__non_rtti_object * _this, - const __non_rtti_object * rhs) -{ - TRACE("(%p %p)\n",_this,rhs); - MSVCRT_bad_typeid_copy_ctor(&_this->base,&rhs->base); -} - -/****************************************************************** - * ??0__non_rtti_object@@QAE@PBD@Z (MSVCRT.@) - */ -void MSVCRT___non_rtti_object_ctor(__non_rtti_object * _this, - const char * name) -{ - TRACE("(%p %s)\n",_this,name); - MSVCRT_bad_typeid_ctor(&_this->base,name); - _this->base.base.vtable = __non_rtti_object_vtable; -} - -/****************************************************************** - * ??1__non_rtti_object@@UAE@XZ (MSVCRT.@) - */ -void MSVCRT___non_rtti_object_dtor(__non_rtti_object * _this) -{ - TRACE("(%p)\n",_this); - MSVCRT_bad_typeid_dtor(&_this->base); -} - -/****************************************************************** - * ??4__non_rtti_object@@QAEAAV0@ABV0@@Z (MSVCRT.@) - */ -__non_rtti_object * MSVCRT___non_rtti_object_opequals(__non_rtti_object * _this, - const __non_rtti_object *rhs) -{ - TRACE("(%p %p)\n",_this,rhs); - memcpy (_this, rhs, sizeof (*_this)); - TRACE("name = %s\n",_this->base.base.name); - return _this; -} - -/****************************************************************** - * ??_E__non_rtti_object@@UAEPAXI@Z (MSVCRT.@) - */ -void * MSVCRT___non_rtti_object__unknown_E(__non_rtti_object * _this, unsigned int arg1) -{ - TRACE("(%p %d)\n",_this,arg1); - _purecall(); - return NULL; -} - -/****************************************************************** - * ??_G__non_rtti_object@@UAEPAXI@Z (MSVCRT.@) - */ -void * MSVCRT___non_rtti_object__unknown_G(__non_rtti_object * _this, unsigned int arg1) -{ - TRACE("(%p %d)\n",_this,arg1); - _purecall(); - return NULL; -} - -/****************************************************************** - * ??0bad_cast@@QAE@ABQBD@Z (MSVCRT.@) - */ -void MSVCRT_bad_cast_ctor(bad_cast * _this, const char ** name) -{ - TRACE("(%p %s)\n",_this,*name); - MSVCRT_exception_ctor(&_this->base, name); - _this->base.vtable = bad_cast_vtable; -} - -/****************************************************************** - * ??0bad_cast@@QAE@ABV0@@Z (MSVCRT.@) - */ -void MSVCRT_bad_cast_copy_ctor(bad_cast * _this, const bad_cast * rhs) -{ - TRACE("(%p %p)\n",_this,rhs); - MSVCRT_exception_copy_ctor(&_this->base,&rhs->base); -} - -/****************************************************************** - * ??1bad_cast@@UAE@XZ (MSVCRT.@) - */ -void MSVCRT_bad_cast_dtor(bad_cast * _this) -{ - TRACE("(%p)\n",_this); - MSVCRT_exception_dtor(&_this->base); -} - -/****************************************************************** - * ??4bad_cast@@QAEAAV0@ABV0@@Z (MSVCRT.@) - */ -bad_cast * MSVCRT_bad_cast_opequals(bad_cast * _this, const bad_cast * rhs) -{ - TRACE("(%p %p)\n",_this,rhs); - MSVCRT_exception_copy_ctor(&_this->base,&rhs->base); - return _this; -} - -/****************************************************************** - * ??8type_info@@QBEHABV0@@Z (MSVCRT.@) - */ -int __stdcall MSVCRT_type_info_opequals_equals(type_info * _this, const type_info * rhs) -{ - TRACE("(%p %p) returning %d\n",_this,rhs,_this->name == rhs->name); - return _this->name == rhs->name; -} - -/****************************************************************** - * ??9type_info@@QBEHABV0@@Z (MSVCRT.@) - */ -int __stdcall MSVCRT_type_info_opnot_equals(type_info * _this, const type_info * rhs) -{ - TRACE("(%p %p) returning %d\n",_this,rhs,_this->name == rhs->name); - return _this->name != rhs->name; -} - -/****************************************************************** - * ??1type_info@@UAE@XZ (MSVCRT.@) - */ -void MSVCRT_type_info_dtor(type_info * _this) -{ - TRACE("(%p)\n",_this); - if (_this->data) - MSVCRT_free(_this->data); -} - -/****************************************************************** - * ?name@type_info@@QBEPBDXZ (MSVCRT.@) - */ -const char * __stdcall MSVCRT_type_info_name(type_info * _this) -{ - TRACE("(%p) returning %s\n",_this,_this->name); - return _this->name; -} - -/****************************************************************** - * ?raw_name@type_info@@QBEPBDXZ (MSVCRT.@) - */ -const char * __stdcall MSVCRT_type_info_raw_name(type_info * _this) -{ - TRACE("(%p) returning %s\n",_this,_this->name); - return _this->name; -} - - /****************************************************************** * __RTtypeid (MSVCRT.@) */ @@ -513,28 +712,3 @@ void* MSVCRT___RTCastToVoid(type_info *cppobj) } return NULL; } - - -/* INTERNAL: Set up vtables - * FIXME:should be static, cope with versions? - */ -void msvcrt_init_vtables(void) -{ - exception_vtable[0] = MSVCRT_exception_dtor; - exception_vtable[1] = (void*)MSVCRT_what_exception; - - bad_typeid_vtable[0] = MSVCRT_bad_typeid_dtor; - bad_typeid_vtable[1] = exception_vtable[1]; - bad_typeid_vtable[2] = _purecall; /* FIXME */ - - __non_rtti_object_vtable[0] = MSVCRT___non_rtti_object_dtor; - __non_rtti_object_vtable[1] = bad_typeid_vtable[1]; - __non_rtti_object_vtable[2] = bad_typeid_vtable[2]; - - bad_cast_vtable[0] = MSVCRT_bad_cast_dtor; - bad_cast_vtable[1] = exception_vtable[1]; - bad_cast_vtable[2] = _purecall; /* FIXME */ - - type_info_vtable[0] = MSVCRT_type_info_dtor; - -} diff --git a/dlls/msvcrt/msvcrt.h b/dlls/msvcrt/msvcrt.h index 719948c136e..888b0ac525f 100644 --- a/dlls/msvcrt/msvcrt.h +++ b/dlls/msvcrt/msvcrt.h @@ -68,6 +68,7 @@ extern MSVCRT_wchar_t ** msvcrt_SnapshotOfEnvironmentW(MSVCRT_wchar_t **); */ int MSVCRT__set_new_mode(int mode); +void* MSVCRT_operator_new(unsigned long size); void MSVCRT_operator_delete(void*); typedef void* (*MSVCRT_malloc_func)(MSVCRT_size_t); @@ -85,7 +86,6 @@ extern void msvcrt_init_console(void); extern void msvcrt_free_console(void); extern void msvcrt_init_args(void); extern void msvcrt_free_args(void); -extern void msvcrt_init_vtables(void); /* run-time error codes */ #define _RT_STACK 0 diff --git a/dlls/msvcrt/msvcrt.spec b/dlls/msvcrt/msvcrt.spec index 71a847e6700..1d350d59091 100644 --- a/dlls/msvcrt/msvcrt.spec +++ b/dlls/msvcrt/msvcrt.spec @@ -1,56 +1,56 @@ # msvcrt.dll - MS VC++ Run Time Library @ cdecl $I10_OUTPUT() MSVCRT_I10_OUTPUT -@ cdecl ??0__non_rtti_object@@QAE@ABV0@@Z(ptr ptr) MSVCRT___non_rtti_object_copy_ctor -@ cdecl ??0__non_rtti_object@@QAE@PBD@Z(ptr ptr) MSVCRT___non_rtti_object_ctor -@ cdecl ??0bad_cast@@QAE@ABQBD@Z(ptr ptr) MSVCRT_bad_cast_ctor -@ cdecl ??0bad_cast@@QAE@ABV0@@Z(ptr ptr) MSVCRT_bad_cast_copy_ctor -@ cdecl ??0bad_typeid@@QAE@ABV0@@Z(ptr ptr) MSVCRT_bad_typeid_copy_ctor -@ cdecl ??0bad_typeid@@QAE@PBD@Z(ptr ptr) MSVCRT_bad_typeid_ctor -@ cdecl ??0exception@@QAE@ABQBD@Z(ptr ptr) MSVCRT_exception_ctor -@ cdecl ??0exception@@QAE@ABV0@@Z(ptr ptr) MSVCRT_exception_copy_ctor -@ cdecl ??0exception@@QAE@XZ(ptr) MSVCRT_exception_default_ctor -@ cdecl ??1__non_rtti_object@@UAE@XZ(ptr) MSVCRT___non_rtti_object_dtor -@ cdecl ??1bad_cast@@UAE@XZ(ptr) MSVCRT_bad_cast_dtor -@ cdecl ??1bad_typeid@@UAE@XZ(ptr) MSVCRT_bad_typeid_dtor -@ cdecl ??1exception@@UAE@XZ(ptr) MSVCRT_exception_dtor -@ cdecl ??1type_info@@UAE@XZ(ptr) MSVCRT_type_info_dtor +@ cdecl -i386 -norelay ??0__non_rtti_object@@QAE@ABV0@@Z(ptr) __thiscall_MSVCRT___non_rtti_object_copy_ctor +@ cdecl -i386 -norelay ??0__non_rtti_object@@QAE@PBD@Z(ptr) __thiscall_MSVCRT___non_rtti_object_ctor +@ cdecl -i386 -norelay ??0bad_cast@@QAE@ABQBD@Z(ptr) __thiscall_MSVCRT_bad_cast_ctor +@ cdecl -i386 -norelay ??0bad_cast@@QAE@ABV0@@Z(ptr) __thiscall_MSVCRT_bad_cast_copy_ctor +@ cdecl -i386 -norelay ??0bad_typeid@@QAE@ABV0@@Z(ptr) __thiscall_MSVCRT_bad_typeid_copy_ctor +@ cdecl -i386 -norelay ??0bad_typeid@@QAE@PBD@Z(ptr) __thiscall_MSVCRT_bad_typeid_ctor +@ cdecl -i386 -norelay ??0exception@@QAE@ABQBD@Z(ptr) __thiscall_MSVCRT_exception_ctor +@ cdecl -i386 -norelay ??0exception@@QAE@ABV0@@Z(ptr) __thiscall_MSVCRT_exception_copy_ctor +@ cdecl -i386 -norelay ??0exception@@QAE@XZ() __thiscall_MSVCRT_exception_default_ctor +@ cdecl -i386 -norelay ??1__non_rtti_object@@UAE@XZ() __thiscall_MSVCRT___non_rtti_object_dtor +@ cdecl -i386 -norelay ??1bad_cast@@UAE@XZ() __thiscall_MSVCRT_bad_cast_dtor +@ cdecl -i386 -norelay ??1bad_typeid@@UAE@XZ() __thiscall_MSVCRT_bad_typeid_dtor +@ cdecl -i386 -norelay ??1exception@@UAE@XZ() __thiscall_MSVCRT_exception_dtor +@ cdecl -i386 -norelay ??1type_info@@UAE@XZ() __thiscall_MSVCRT_type_info_dtor @ cdecl ??2@YAPAXI@Z(long) MSVCRT_operator_new @ cdecl ??_U@YAPAXI@Z(long) MSVCRT_operator_new @ cdecl ??3@YAXPAX@Z(ptr) MSVCRT_operator_delete @ cdecl ??_V@YAXPAX@Z(ptr) MSVCRT_operator_delete -@ cdecl ??4__non_rtti_object@@QAEAAV0@ABV0@@Z(ptr ptr) MSVCRT___non_rtti_object_opequals -@ cdecl ??4bad_cast@@QAEAAV0@ABV0@@Z(ptr ptr) MSVCRT_bad_cast_opequals -@ cdecl ??4bad_typeid@@QAEAAV0@ABV0@@Z(ptr ptr)MSVCRT_bad_typeid_opequals -@ cdecl ??4exception@@QAEAAV0@ABV0@@Z(ptr ptr) MSVCRT_exception_opequals -@ stdcall ??8type_info@@QBEHABV0@@Z(ptr ptr) MSVCRT_type_info_opequals_equals -@ stdcall ??9type_info@@QBEHABV0@@Z(ptr ptr) MSVCRT_type_info_opnot_equals -@ stub ??_7__non_rtti_object@@6B@ -@ stub ??_7bad_cast@@6B@ -@ stub ??_7bad_typeid@@6B@ -@ stub ??_7exception@@6B@ -@ cdecl ??_E__non_rtti_object@@UAEPAXI@Z(ptr long) MSVCRT___non_rtti_object__unknown_E -@ stub ??_Ebad_cast@@UAEPAXI@Z #(ptr long) -@ stub ??_Ebad_typeid@@UAEPAXI@Z #(ptr long) -@ cdecl ??_Eexception@@UAEPAXI@Z(ptr long) MSVCRT_exception__unknown_E -@ cdecl ??_G__non_rtti_object@@UAEPAXI@Z(ptr long) MSVCRT___non_rtti_object__unknown_G -@ stub ??_Gbad_cast@@UAEPAXI@Z #(ptr long) -@ stub ??_Gbad_typeid@@UAEPAXI@Z #(ptr long) -@ cdecl ??_Gexception@@UAEPAXI@Z(ptr long) MSVCRT_exception__unknown_G +@ cdecl -i386 -norelay ??4__non_rtti_object@@QAEAAV0@ABV0@@Z(ptr) __thiscall_MSVCRT___non_rtti_object_opequals +@ cdecl -i386 -norelay ??4bad_cast@@QAEAAV0@ABV0@@Z(ptr) __thiscall_MSVCRT_bad_cast_opequals +@ cdecl -i386 -norelay ??4bad_typeid@@QAEAAV0@ABV0@@Z(ptr) __thiscall_MSVCRT_bad_typeid_opequals +@ cdecl -i386 -norelay ??4exception@@QAEAAV0@ABV0@@Z(ptr) __thiscall_MSVCRT_exception_opequals +@ cdecl -i386 -norelay ??8type_info@@QBEHABV0@@Z(ptr) __thiscall_MSVCRT_type_info_opequals_equals +@ cdecl -i386 -norelay ??9type_info@@QBEHABV0@@Z(ptr) __thiscall_MSVCRT_type_info_opnot_equals +@ extern -i386 ??_7__non_rtti_object@@6B@ MSVCRT___non_rtti_object_vtable +@ extern -i386 ??_7bad_cast@@6B@ MSVCRT_bad_cast_vtable +@ extern -i386 ??_7bad_typeid@@6B@ MSVCRT_bad_typeid_vtable +@ extern -i386 ??_7exception@@6B@ MSVCRT_exception_vtable +@ cdecl -i386 -norelay ??_E__non_rtti_object@@UAEPAXI@Z(long) __thiscall_MSVCRT___non_rtti_object_vector_dtor +@ cdecl -i386 -norelay ??_Ebad_cast@@UAEPAXI@Z(long) __thiscall_MSVCRT_bad_cast_vector_dtor +@ cdecl -i386 -norelay ??_Ebad_typeid@@UAEPAXI@Z(long) __thiscall_MSVCRT_bad_typeid_vector_dtor +@ cdecl -i386 -norelay ??_Eexception@@UAEPAXI@Z(long) __thiscall_MSVCRT_exception_vector_dtor +@ cdecl -i386 -norelay ??_G__non_rtti_object@@UAEPAXI@Z(long) __thiscall_MSVCRT___non_rtti_object_scalar_dtor +@ cdecl -i386 -norelay ??_Gbad_cast@@UAEPAXI@Z(long) __thiscall_MSVCRT_bad_cast_scalar_dtor +@ cdecl -i386 -norelay ??_Gbad_typeid@@UAEPAXI@Z(long) __thiscall_MSVCRT_bad_typeid_scalar_dtor +@ cdecl -i386 -norelay ??_Gexception@@UAEPAXI@Z(long) __thiscall_MSVCRT_exception_scalar_dtor @ cdecl ?_query_new_handler@@YAP6AHI@ZXZ() MSVCRT__query_new_handler @ cdecl ?_query_new_mode@@YAHXZ() MSVCRT__query_new_mode @ cdecl ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z(ptr) MSVCRT__set_new_handler @ cdecl ?_set_new_mode@@YAHH@Z(long) MSVCRT__set_new_mode @ cdecl ?_set_se_translator@@YAP6AXIPAU_EXCEPTION_POINTERS@@@ZP6AXI0@Z@Z(ptr) MSVCRT__set_se_translator -@ stub ?before@type_info@@QBEHABV1@@Z #(ptr ptr) stdcall -@ stdcall ?name@type_info@@QBEPBDXZ(ptr) MSVCRT_type_info_name -@ stdcall ?raw_name@type_info@@QBEPBDXZ(ptr) MSVCRT_type_info_raw_name +@ cdecl -i386 -norelay ?before@type_info@@QBEHABV1@@Z(ptr) __thiscall_MSVCRT_type_info_before +@ cdecl -i386 -norelay ?name@type_info@@QBEPBDXZ() __thiscall_MSVCRT_type_info_name +@ cdecl -i386 -norelay ?raw_name@type_info@@QBEPBDXZ() __thiscall_MSVCRT_type_info_raw_name @ cdecl ?set_new_handler@@YAP6AXXZP6AXXZ@Z(ptr) MSVCRT__set_new_handler @ cdecl ?set_terminate@@YAP6AXXZP6AXXZ@Z(ptr) MSVCRT_set_terminate @ cdecl ?set_unexpected@@YAP6AXXZP6AXXZ@Z(ptr) MSVCRT_set_unexpected @ cdecl ?terminate@@YAXXZ() MSVCRT_terminate @ cdecl ?unexpected@@YAXXZ() MSVCRT_unexpected -@ cdecl ?what@exception@@UBEPBDXZ(ptr) MSVCRT_what_exception +@ cdecl -i386 -norelay ?what@exception@@UBEPBDXZ() __thiscall_MSVCRT_what_exception @ cdecl _CIacos() @ cdecl _CIasin() @ cdecl _CIatan() diff --git a/dlls/msvcrtd/msvcrtd.spec b/dlls/msvcrtd/msvcrtd.spec index a8763f68a8e..e8a87dd619b 100644 --- a/dlls/msvcrtd/msvcrtd.spec +++ b/dlls/msvcrtd/msvcrtd.spec @@ -1,55 +1,55 @@ # msvcrtd.dll - MS VC++ Run Time Library @ cdecl $I10_OUTPUT() msvcrt.$I10_OUTPUT -@ cdecl ??0__non_rtti_object@@QAE@ABV0@@Z(ptr ptr) msvcrt.??0__non_rtti_object@@QAE@ABV0@@Z -@ cdecl ??0__non_rtti_object@@QAE@PBD@Z(ptr ptr) msvcrt.??0__non_rtti_object@@QAE@PBD@Z -@ cdecl ??0bad_cast@@QAE@ABQBD@Z(ptr ptr) msvcrt.??0bad_cast@@QAE@ABQBD@Z -@ cdecl ??0bad_cast@@QAE@ABV0@@Z(ptr ptr) msvcrt.??0bad_cast@@QAE@ABV0@@Z -@ cdecl ??0bad_typeid@@QAE@ABV0@@Z(ptr ptr) msvcrt.??0bad_typeid@@QAE@ABV0@@Z -@ cdecl ??0bad_typeid@@QAE@PBD@Z(ptr ptr) msvcrt.??0bad_typeid@@QAE@PBD@Z -@ cdecl ??0exception@@QAE@ABQBD@Z(ptr ptr) msvcrt.??0exception@@QAE@ABQBD@Z -@ cdecl ??0exception@@QAE@ABV0@@Z(ptr ptr) msvcrt.??0exception@@QAE@ABV0@@Z -@ cdecl ??0exception@@QAE@XZ(ptr) msvcrt.??0exception@@QAE@XZ -@ cdecl ??1__non_rtti_object@@UAE@XZ(ptr) msvcrt.??1__non_rtti_object@@UAE@XZ -@ cdecl ??1bad_cast@@UAE@XZ(ptr) msvcrt.??1bad_cast@@UAE@XZ -@ cdecl ??1bad_typeid@@UAE@XZ(ptr) msvcrt.??1bad_typeid@@UAE@XZ -@ cdecl ??1exception@@UAE@XZ(ptr) msvcrt.??1exception@@UAE@XZ -@ cdecl ??1type_info@@UAE@XZ(ptr) msvcrt.??1type_info@@UAE@XZ +@ cdecl -i386 ??0__non_rtti_object@@QAE@ABV0@@Z(ptr) msvcrt.??0__non_rtti_object@@QAE@ABV0@@Z +@ cdecl -i386 ??0__non_rtti_object@@QAE@PBD@Z(ptr) msvcrt.??0__non_rtti_object@@QAE@PBD@Z +@ cdecl -i386 ??0bad_cast@@QAE@ABQBD@Z(ptr) msvcrt.??0bad_cast@@QAE@ABQBD@Z +@ cdecl -i386 ??0bad_cast@@QAE@ABV0@@Z(ptr) msvcrt.??0bad_cast@@QAE@ABV0@@Z +@ cdecl -i386 ??0bad_typeid@@QAE@ABV0@@Z(ptr) msvcrt.??0bad_typeid@@QAE@ABV0@@Z +@ cdecl -i386 ??0bad_typeid@@QAE@PBD@Z(ptr) msvcrt.??0bad_typeid@@QAE@PBD@Z +@ cdecl -i386 ??0exception@@QAE@ABQBD@Z(ptr) msvcrt.??0exception@@QAE@ABQBD@Z +@ cdecl -i386 ??0exception@@QAE@ABV0@@Z(ptr) msvcrt.??0exception@@QAE@ABV0@@Z +@ cdecl -i386 ??0exception@@QAE@XZ() msvcrt.??0exception@@QAE@XZ +@ cdecl -i386 ??1__non_rtti_object@@UAE@XZ() msvcrt.??1__non_rtti_object@@UAE@XZ +@ cdecl -i386 ??1bad_cast@@UAE@XZ() msvcrt.??1bad_cast@@UAE@XZ +@ cdecl -i386 ??1bad_typeid@@UAE@XZ() msvcrt.??1bad_typeid@@UAE@XZ +@ cdecl -i386 ??1exception@@UAE@XZ() msvcrt.??1exception@@UAE@XZ +@ cdecl -i386 ??1type_info@@UAE@XZ() msvcrt.??1type_info@@UAE@XZ @ cdecl ??2@YAPAXI@Z(long) msvcrt.??2@YAPAXI@Z @ cdecl ??2@YAPAXIHPBDH@Z(long) msvcrt.??2@YAPAXIHPBDH@Z @ cdecl ??3@YAXPAX@Z(ptr) msvcrt.??3@YAXPAX@Z -@ cdecl ??4__non_rtti_object@@QAEAAV0@ABV0@@Z(ptr ptr) msvcrt.??4__non_rtti_object@@QAEAAV0@ABV0@@Z -@ cdecl ??4bad_cast@@QAEAAV0@ABV0@@Z(ptr ptr) msvcrt.??4bad_cast@@QAEAAV0@ABV0@@Z -@ cdecl ??4bad_typeid@@QAEAAV0@ABV0@@Z(ptr ptr) msvcrt.??4bad_typeid@@QAEAAV0@ABV0@@Z -@ cdecl ??4exception@@QAEAAV0@ABV0@@Z(ptr ptr) msvcrt.??4exception@@QAEAAV0@ABV0@@Z -@ stdcall ??8type_info@@QBEHABV0@@Z(ptr ptr) msvcrt.??8type_info@@QBEHABV0@@Z -@ stdcall ??9type_info@@QBEHABV0@@Z(ptr ptr) msvcrt.??9type_info@@QBEHABV0@@Z -@ stub ??_7__non_rtti_object@@6B@ -@ stub ??_7bad_cast@@6B@ -@ stub ??_7bad_typeid@@6B@ -@ stub ??_7exception@@6B@ -@ cdecl ??_E__non_rtti_object@@UAEPAXI@Z(ptr long) msvcrt.??_E__non_rtti_object@@UAEPAXI@Z -@ stub ??_Ebad_cast@@UAEPAXI@Z #(ptr long) -@ stub ??_Ebad_typeid@@UAEPAXI@Z #(ptr long) -@ cdecl ??_Eexception@@UAEPAXI@Z(ptr long) msvcrt.??_Eexception@@UAEPAXI@Z -@ cdecl ??_G__non_rtti_object@@UAEPAXI@Z(ptr long) msvcrt.??_G__non_rtti_object@@UAEPAXI@Z -@ stub ??_Gbad_cast@@UAEPAXI@Z #(ptr long) -@ stub ??_Gbad_typeid@@UAEPAXI@Z #(ptr long) -@ cdecl ??_Gexception@@UAEPAXI@Z(ptr long) msvcrt.??_Gexception@@UAEPAXI@Z +@ cdecl -i386 ??4__non_rtti_object@@QAEAAV0@ABV0@@Z(ptr) msvcrt.??4__non_rtti_object@@QAEAAV0@ABV0@@Z +@ cdecl -i386 ??4bad_cast@@QAEAAV0@ABV0@@Z(ptr) msvcrt.??4bad_cast@@QAEAAV0@ABV0@@Z +@ cdecl -i386 ??4bad_typeid@@QAEAAV0@ABV0@@Z(ptr) msvcrt.??4bad_typeid@@QAEAAV0@ABV0@@Z +@ cdecl -i386 ??4exception@@QAEAAV0@ABV0@@Z(ptr) msvcrt.??4exception@@QAEAAV0@ABV0@@Z +@ cdecl -i386 ??8type_info@@QBEHABV0@@Z(ptr) msvcrt.??8type_info@@QBEHABV0@@Z +@ cdecl -i386 ??9type_info@@QBEHABV0@@Z(ptr) msvcrt.??9type_info@@QBEHABV0@@Z +@ extern -i386 ??_7__non_rtti_object@@6B@ msvcrt.??_7__non_rtti_object@@6B@ +@ extern -i386 ??_7bad_cast@@6B@ msvcrt.??_7bad_cast@@6B@ +@ extern -i386 ??_7bad_typeid@@6B@ msvcrt.??_7bad_typeid@@6B@ +@ extern -i386 ??_7exception@@6B@ msvcrt.??_7exception@@6B@ +@ cdecl -i386 ??_E__non_rtti_object@@UAEPAXI@Z(long) msvcrt.??_E__non_rtti_object@@UAEPAXI@Z +@ cdecl -i386 ??_Ebad_cast@@UAEPAXI@Z(long) msvcrt.??_Ebad_cast@@UAEPAXI@Z +@ cdecl -i386 ??_Ebad_typeid@@UAEPAXI@Z(long) msvcrt.??_Ebad_typeid@@UAEPAXI@Z +@ cdecl -i386 ??_Eexception@@UAEPAXI@Z(long) msvcrt.??_Eexception@@UAEPAXI@Z +@ cdecl -i386 ??_G__non_rtti_object@@UAEPAXI@Z(long) msvcrt.??_G__non_rtti_object@@UAEPAXI@Z +@ cdecl -i386 ??_Gbad_cast@@UAEPAXI@Z(long) msvcrt.??_Gbad_cast@@UAEPAXI@Z +@ cdecl -i386 ??_Gbad_typeid@@UAEPAXI@Z(long) msvcrt.??_Gbad_typeid@@UAEPAXI@Z +@ cdecl -i386 ??_Gexception@@UAEPAXI@Z(long) msvcrt.??_Gexception@@UAEPAXI@Z @ cdecl ?_query_new_handler@@YAP6AHI@ZXZ() msvcrt.?_query_new_handler@@YAP6AHI@ZXZ @ cdecl ?_query_new_mode@@YAHXZ() msvcrt.?_query_new_mode@@YAHXZ @ cdecl ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z(ptr) msvcrt.?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z @ cdecl ?_set_new_mode@@YAHH@Z(long) msvcrt.?_set_new_mode@@YAHH@Z @ cdecl ?_set_se_translator@@YAP6AXIPAU_EXCEPTION_POINTERS@@@ZP6AXI0@Z@Z(ptr) msvcrt.?_set_se_translator@@YAP6AXIPAU_EXCEPTION_POINTERS@@@ZP6AXI0@Z@Z -@ stub ?before@type_info@@QBEHABV1@@Z #(ptr ptr) stdcall -@ stdcall ?name@type_info@@QBEPBDXZ(ptr) msvcrt.?name@type_info@@QBEPBDXZ -@ stdcall ?raw_name@type_info@@QBEPBDXZ(ptr) msvcrt.?raw_name@type_info@@QBEPBDXZ +@ cdecl -i386 ?before@type_info@@QBEHABV1@@Z(ptr) msvcrt.?before@type_info@@QBEHABV1@@Z +@ cdecl -i386 ?name@type_info@@QBEPBDXZ() msvcrt.?name@type_info@@QBEPBDXZ +@ cdecl -i386 ?raw_name@type_info@@QBEPBDXZ() msvcrt.?raw_name@type_info@@QBEPBDXZ @ cdecl ?set_new_handler@@YAP6AXXZP6AXXZ@Z(ptr) msvcrt.?set_new_handler@@YAP6AXXZP6AXXZ@Z @ cdecl ?set_terminate@@YAP6AXXZP6AXXZ@Z(ptr) msvcrt.?set_terminate@@YAP6AXXZP6AXXZ@Z @ cdecl ?set_unexpected@@YAP6AXXZP6AXXZ@Z(ptr) msvcrt.?set_unexpected@@YAP6AXXZP6AXXZ@Z @ cdecl ?terminate@@YAXXZ() msvcrt.?terminate@@YAXXZ @ cdecl ?unexpected@@YAXXZ() msvcrt.?unexpected@@YAXXZ -@ cdecl ?what@exception@@UBEPBDXZ(ptr) msvcrt.?what@exception@@UBEPBDXZ +@ cdecl -i386 ?what@exception@@UBEPBDXZ() msvcrt.?what@exception@@UBEPBDXZ @ cdecl _CIacos() msvcrt._CIacos @ cdecl _CIasin() msvcrt._CIasin @ cdecl _CIatan() msvcrt._CIatan