Piotr Caban : msvcp140: Add _ContextCallback implementation.
Module: wine Branch: master Commit: 2fe03d7d3765895260e524e41c187bc0393bc912 URL: http://source.winehq.org/git/wine.git/?a=commit;h=2fe03d7d3765895260e524e41c... Author: Piotr Caban <piotr(a)codeweavers.com> Date: Fri Mar 10 16:01:36 2017 +0100 msvcp140: Add _ContextCallback implementation. Signed-off-by: Piotr Caban <piotr(a)codeweavers.com> Signed-off-by: Alexandre Julliard <julliard(a)winehq.org> --- dlls/msvcp140/msvcp140.spec | 26 +++++++++++------------ dlls/msvcp90/misc.c | 51 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 13 deletions(-) diff --git a/dlls/msvcp140/msvcp140.spec b/dlls/msvcp140/msvcp140.spec index 9da2675..7270e20 100644 --- a/dlls/msvcp140/msvcp140.spec +++ b/dlls/msvcp140/msvcp140.spec @@ -1096,9 +1096,9 @@ @ cdecl -arch=win64 ?_Addfac(a)_Locimp@locale(a)std@@AEAAXPEAVfacet(a)23@_K(a)Z(ptr ptr long) locale__Locimp__Addfac @ cdecl -arch=win32 ?_Addstd(a)ios_base@std@@SAXPAV12@@Z(ptr) ios_base_Addstd @ cdecl -arch=win64 ?_Addstd(a)ios_base@std@@SAXPEAV12@@Z(ptr) ios_base_Addstd -@ stub -arch=arm ?_Assign(a)_ContextCallback@details(a)Concurrency@@AAAXPAX(a)Z -@ stub -arch=i386 ?_Assign(a)_ContextCallback@details(a)Concurrency@@AAEXPAX(a)Z -@ stub -arch=win64 ?_Assign(a)_ContextCallback@details(a)Concurrency@@AEAAXPEAX(a)Z +@ cdecl -arch=arm ?_Assign(a)_ContextCallback@details(a)Concurrency@@AAAXPAX(a)Z(ptr ptr) _ContextCallback__Assign +@ thiscall -arch=i386 ?_Assign(a)_ContextCallback@details(a)Concurrency@@AAEXPAX(a)Z(ptr ptr) _ContextCallback__Assign +@ cdecl -arch=win64 ?_Assign(a)_ContextCallback@details(a)Concurrency@@AEAAXPEAX(a)Z(ptr ptr) _ContextCallback__Assign @ stub ?_Atexit@@YAXP6AXXZ(a)Z @ extern ?_BADOFF(a)std@@3_JB std_BADOFF @ cdecl -arch=arm ?_C_str@?$_Yarn(a)D@std@@QBAPBDXZ(ptr) _Yarn_char_c_str @@ -1110,15 +1110,15 @@ @ cdecl -arch=arm ?_C_str@?$_Yarn(a)_W@std@@QBAPB_WXZ(ptr) _Yarn_wchar__C_str @ thiscall -arch=i386 ?_C_str@?$_Yarn(a)_W@std@@QBEPB_WXZ(ptr) _Yarn_wchar__C_str @ cdecl -arch=win64 ?_C_str@?$_Yarn(a)_W@std@@QEBAPEB_WXZ(ptr) _Yarn_wchar__C_str -@ stub -arch=arm ?_CallInContext(a)_ContextCallback@details(a)Concurrency@@QBAXV?$function@$$A6AXXZ(a)std@@_N(a)Z -@ stub -arch=i386 ?_CallInContext(a)_ContextCallback@details(a)Concurrency@@QBEXV?$function@$$A6AXXZ(a)std@@_N(a)Z -@ stub -arch=win64 ?_CallInContext(a)_ContextCallback@details(a)Concurrency@@QEBAXV?$function@$$A6AXXZ(a)std@@_N(a)Z +@ cdecl -arch=arm ?_CallInContext(a)_ContextCallback@details(a)Concurrency@@QBAXV?$function@$$A6AXXZ(a)std@@_N(a)Z(ptr ptr long) _ContextCallback__CallInContext +@ thiscall -arch=i386 ?_CallInContext(a)_ContextCallback@details(a)Concurrency@@QBEXV?$function@$$A6AXXZ(a)std@@_N(a)Z(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr long) _ContextCallback__CallInContext +@ cdecl -arch=win64 ?_CallInContext(a)_ContextCallback@details(a)Concurrency@@QEBAXV?$function@$$A6AXXZ(a)std@@_N(a)Z(ptr ptr long) _ContextCallback__CallInContext @ cdecl -arch=arm ?_Callfns(a)ios_base@std@@AAAXW4event(a)12@@Z(ptr long) ios_base_Callfns @ thiscall -arch=i386 ?_Callfns(a)ios_base@std@@AAEXW4event(a)12@@Z(ptr long) ios_base_Callfns @ cdecl -arch=win64 ?_Callfns(a)ios_base@std@@AEAAXW4event(a)12@@Z(ptr long) ios_base_Callfns -@ stub -arch=arm ?_Capture(a)_ContextCallback@details(a)Concurrency@@AAAXXZ -@ stub -arch=i386 ?_Capture(a)_ContextCallback@details(a)Concurrency@@AAEXXZ -@ stub -arch=win64 ?_Capture(a)_ContextCallback@details(a)Concurrency@@AEAAXXZ +@ cdecl -arch=arm ?_Capture(a)_ContextCallback@details(a)Concurrency@@AAAXXZ(ptr) _ContextCallback__Capture +@ thiscall -arch=i386 ?_Capture(a)_ContextCallback@details(a)Concurrency@@AAEXXZ(ptr) _ContextCallback__Capture +@ cdecl -arch=win64 ?_Capture(a)_ContextCallback@details(a)Concurrency@@AEAAXXZ(ptr) _ContextCallback__Capture @ extern -arch=win32 ?_Clocptr(a)_Locimp@locale(a)std@@0PAV123(a)A locale__Locimp__Clocptr @ extern -arch=win64 ?_Clocptr(a)_Locimp@locale(a)std@@0PEAV123(a)EA locale__Locimp__Clocptr @ cdecl -arch=arm ?_Decref(a)facet@locale(a)std@@UAAPAV_Facet_base(a)3@XZ(ptr) locale_facet__Decref @@ -1442,7 +1442,7 @@ @ cdecl -arch=win64 ?_Iput@?$num_put(a)GV?$ostreambuf_iterator(a)GU?$char_traits(a)G@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator(a)GU?$char_traits(a)G@std@@@2(a)V32@AEAVios_base(a)2@GPEAD_K(a)Z(ptr ptr ptr ptr long ptr long) num_put_short__Iput @ cdecl -arch=win32 ?_Iput@?$num_put(a)_WV?$ostreambuf_iterator(a)_WU?$char_traits(a)_W@std@@@std@@@std@@ABA?AV?$ostreambuf_iterator(a)_WU?$char_traits(a)_W@std@@@2(a)V32@AAVios_base(a)2@_WPADI(a)Z(ptr ptr long ptr ptr long ptr long) num_put_wchar__Iput @ cdecl -arch=win64 ?_Iput@?$num_put(a)_WV?$ostreambuf_iterator(a)_WU?$char_traits(a)_W@std@@@std@@@std@@AEBA?AV?$ostreambuf_iterator(a)_WU?$char_traits(a)_W@std@@@2(a)V32@AEAVios_base(a)2@_WPEAD_K(a)Z(ptr ptr ptr ptr long ptr long) num_put_wchar__Iput -@ stub ?_IsCurrentOriginSTA(a)_ContextCallback@details(a)Concurrency@@CA_NXZ +@ cdecl ?_IsCurrentOriginSTA(a)_ContextCallback@details(a)Concurrency@@CA_NXZ(ptr) _ContextCallback__IsCurrentOriginSTA @ stub ?_IsNonBlockingThread(a)_Task_impl_base@details(a)Concurrency@@SA_NXZ @ cdecl -arch=win32 ?_Locimp_Addfac(a)_Locimp@locale(a)std@@CAXPAV123(a)PAVfacet@23(a)I@Z(ptr ptr long) locale__Locimp__Locimp_Addfac @ cdecl -arch=win64 ?_Locimp_Addfac(a)_Locimp@locale(a)std@@CAXPEAV123(a)PEAVfacet@23(a)_K@Z(ptr ptr long) locale__Locimp__Locimp_Addfac @@ -1592,9 +1592,9 @@ @ stub ?_ReportUnobservedException(a)details@Concurrency@@YAXXZ @ stub -arch=win32 ?_Reschedule_chore(a)details@Concurrency@@YAHPBU_Threadpool_chore(a)12@@Z @ stub -arch=win64 ?_Reschedule_chore(a)details@Concurrency@@YAHPEBU_Threadpool_chore(a)12@@Z -@ stub -arch=arm ?_Reset(a)_ContextCallback@details(a)Concurrency@@AAAXXZ -@ stub -arch=i386 ?_Reset(a)_ContextCallback@details(a)Concurrency@@AAEXXZ -@ stub -arch=win64 ?_Reset(a)_ContextCallback@details(a)Concurrency@@AEAAXXZ +@ cdecl -arch=arm ?_Reset(a)_ContextCallback@details(a)Concurrency@@AAAXXZ(ptr) _ContextCallback__Reset +@ thiscall -arch=i386 ?_Reset(a)_ContextCallback@details(a)Concurrency@@AAEXXZ(ptr) _ContextCallback__Reset +@ cdecl -arch=win64 ?_Reset(a)_ContextCallback@details(a)Concurrency@@AEAAXXZ(ptr) _ContextCallback__Reset @ stub ?_Rethrow_future_exception(a)std@@YAXVexception_ptr(a)1@@Z @ stub -arch=win32 ?_Rng_abort(a)std@@YAXPBD(a)Z @ stub -arch=win64 ?_Rng_abort(a)std@@YAXPEBD(a)Z diff --git a/dlls/msvcp90/misc.c b/dlls/msvcp90/misc.c index e819699..aa0a289 100644 --- a/dlls/msvcp90/misc.c +++ b/dlls/msvcp90/misc.c @@ -1376,4 +1376,55 @@ task_continuation_context* __thiscall task_continuation_context_ctor(task_contin memset(this, 0, sizeof(*this)); return this; } + +typedef struct { + const vtable_ptr *vtable; + void (__cdecl *func)(void); + int unk[4]; + void *unk2[3]; + void *this; +} function_void_cdecl_void; + +/* ?_Assign(a)_ContextCallback@details(a)Concurrency@@AAEXPAX(a)Z */ +/* ?_Assign(a)_ContextCallback@details(a)Concurrency@@AEAAXPEAX(a)Z */ +DEFINE_THISCALL_WRAPPER(_ContextCallback__Assign, 8) +void __thiscall _ContextCallback__Assign(void *this, void *v) +{ + TRACE("(%p %p)\n", this, v); +} + +#define call_function_do_call(this) CALL_VTBL_FUNC(this, 8, void, (function_void_cdecl_void*), (this)) +#define call_function_do_clean(this,b) CALL_VTBL_FUNC(this, 16, void, (function_void_cdecl_void*,MSVCP_bool), (this, b)) +/* ?_CallInContext(a)_ContextCallback@details(a)Concurrency@@QBEXV?$function@$$A6AXXZ(a)std@@_N(a)Z */ +/* ?_CallInContext(a)_ContextCallback@details(a)Concurrency@@QEBAXV?$function@$$A6AXXZ(a)std@@_N(a)Z */ +DEFINE_THISCALL_WRAPPER(_ContextCallback__CallInContext, 48) +void __thiscall _ContextCallback__CallInContext(const void *this, function_void_cdecl_void func, MSVCP_bool b) +{ + TRACE("(%p %p %x)\n", this, func.func, b); + call_function_do_call(func.this); + call_function_do_clean(func.this, func.this!=&func); +} + +/* ?_Capture(a)_ContextCallback@details(a)Concurrency@@AAEXXZ */ +/* ?_Capture(a)_ContextCallback@details(a)Concurrency@@AEAAXXZ */ +DEFINE_THISCALL_WRAPPER(_ContextCallback__Capture, 4) +void __thiscall _ContextCallback__Capture(void *this) +{ + TRACE("(%p)\n", this); +} + +/* ?_Reset(a)_ContextCallback@details(a)Concurrency@@AAEXXZ */ +/* ?_Reset(a)_ContextCallback@details(a)Concurrency@@AEAAXXZ */ +DEFINE_THISCALL_WRAPPER(_ContextCallback__Reset, 4) +void __thiscall _ContextCallback__Reset(void *this) +{ + TRACE("(%p)\n", this); +} + +/* ?_IsCurrentOriginSTA(a)_ContextCallback@details(a)Concurrency@@CA_NXZ */ +MSVCP_bool __cdecl _ContextCallback__IsCurrentOriginSTA(void *this) +{ + TRACE("(%p)\n", this); + return FALSE; +} #endif
participants (1)
-
Alexandre Julliard