diff --git a/VC-LTL helper for Visual Studio.props b/VC-LTL helper for Visual Studio.props index c5010d2ff..72af1a500 100644 --- a/VC-LTL helper for Visual Studio.props +++ b/VC-LTL helper for Visual Studio.props @@ -29,11 +29,14 @@ VC-LTL默认搜索顺序 + + + - - + + diff --git a/VC-LTL helper for cmake.cmake b/VC-LTL helper for cmake.cmake index 90370030f..047709c43 100644 --- a/VC-LTL helper for cmake.cmake +++ b/VC-LTL helper for cmake.cmake @@ -30,6 +30,9 @@ #取消下方注释可以开启VC-LTL轻量模式,轻量模式更加注重体积控制,但是CRT规范将会维持在VS2008。如果你需要高度兼容微软UCRT,那么请不要打开此选项!!! #set(DisableAdvancedSupport "true") +#取消下方注释可以将C/C++库连接到动态库 ltlbase.dll、msvcp140_ltl.dll、concrt140_ltl.dll。 +#set(DisableStaticLibSupport "true") + #################################################################################################################################################### diff --git a/VC-LTL helper for nmake.cmd b/VC-LTL helper for nmake.cmd index fb0545770..ff5dd355f 100644 --- a/VC-LTL helper for nmake.cmd +++ b/VC-LTL helper for nmake.cmd @@ -28,6 +28,9 @@ ::ȡ·עͿԿVC-LTLģʽģʽעƣCRT淶άVS2008Ҫ߶ȼ΢UCRTô벻Ҫ򿪴ѡ ::set DisableAdvancedSupport=true +::ȡ·עͿԽC/C++ӵ̬ ltlbase.dllmsvcp140_ltl.dllconcrt140_ltl.dll +::set DisableStaticLibSupport=true + ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: diff --git a/VC/14.11.25503/include/functional b/VC/14.11.25503/include/functional index 0261e4769..a6e70e75d 100644 --- a/VC/14.11.25503/include/functional +++ b/VC/14.11.25503/include/functional @@ -65,7 +65,7 @@ public: } }; -[[noreturn]] extern void __CLRCALL_PURE_OR_CDECL _Xbad_function_call(); +[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xbad_function_call(); // TEMPLATE FUNCTION _Test_callable template diff --git a/VC/14.11.25503/include/regex b/VC/14.11.25503/include/regex index 91a61b083..9a5f4ec3a 100644 --- a/VC/14.11.25503/include/regex +++ b/VC/14.11.25503/include/regex @@ -152,7 +152,7 @@ enum error_type }; } // namespace regex_constants -[[noreturn]] extern void __CLRCALL_PURE_OR_CDECL _Xregex_error( +[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xregex_error( regex_constants::error_type _Code); // TEMPLATE CLASS regex_traits diff --git a/VC/14.11.25503/include/xutility b/VC/14.11.25503/include/xutility index 3ee5da9c0..fa1d06074 100644 --- a/VC/14.11.25503/include/xutility +++ b/VC/14.11.25503/include/xutility @@ -3727,12 +3727,12 @@ struct allocator_arg_t constexpr allocator_arg_t allocator_arg{}; -[[noreturn]] extern void __CLRCALL_PURE_OR_CDECL _Xbad_alloc(); -[[noreturn]] extern void __CLRCALL_PURE_OR_CDECL _Xinvalid_argument(_In_z_ const char *); -[[noreturn]] extern void __CLRCALL_PURE_OR_CDECL _Xlength_error(_In_z_ const char *); -[[noreturn]] extern void __CLRCALL_PURE_OR_CDECL _Xout_of_range(_In_z_ const char *); -[[noreturn]] extern void __CLRCALL_PURE_OR_CDECL _Xoverflow_error(_In_z_ const char *); -[[noreturn]] extern void __CLRCALL_PURE_OR_CDECL _Xruntime_error(_In_z_ const char *); +[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xbad_alloc(); +[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xinvalid_argument(_In_z_ const char *); +[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xlength_error(_In_z_ const char *); +[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xout_of_range(_In_z_ const char *); +[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xoverflow_error(_In_z_ const char *); +[[noreturn]] _CRTIMP2_PURE void __CLRCALL_PURE_OR_CDECL _Xruntime_error(_In_z_ const char *); _STD_END namespace std { diff --git a/_msvcrt.h b/_msvcrt.h index 20f1f4710..e95c4da16 100644 --- a/_msvcrt.h +++ b/_msvcrt.h @@ -46,6 +46,14 @@ #define _Build_By_LTL 1 #endif +#ifdef _LTL_Using_Dynamic_Lib + +#ifdef _STATIC_CPPLIB +#undef _STATIC_CPPLIB +#endif + +#else + #ifndef _DISABLE_DEPRECATE_STATIC_CPPLIB #define _DISABLE_DEPRECATE_STATIC_CPPLIB 1 #endif @@ -55,6 +63,7 @@ #define _STATIC_CPPLIB 1 #endif +#endif //!_LTL_Using_Dynamic_Lib @@ -100,9 +109,17 @@ _LTL_PushWarning(1004, "不引用_LTL_Initialization 可能导致某些补充函 #endif //!_LIB +#ifndef _LTLIMP +#ifdef _LTL_Using_Dynamic_Lib +#define _LTLIMP __declspec(dllimport) +#else +#define _LTLIMP +#endif +#endif + _CRT_BEGIN_C_HEADER -extern unsigned long __cdecl __LTL_GetOsMinVersion(); -extern unsigned long long __cdecl __LTL_GetOsVersion(); +_LTLIMP unsigned long __cdecl __LTL_GetOsMinVersion(); +_LTLIMP unsigned long long __cdecl __LTL_GetOsVersion(); _CRT_END_C_HEADER #endif //!RC_INVOKED diff --git a/config/Vista/Dynamic/LTL_config.h b/config/Vista/Dynamic/LTL_config.h new file mode 100644 index 000000000..4b9af6369 --- /dev/null +++ b/config/Vista/Dynamic/LTL_config.h @@ -0,0 +1,7 @@ +#pragma once + +#include "..\LTL_config.h" + +#ifndef _LTL_Using_Dynamic_Lib +#define _LTL_Using_Dynamic_Lib +#endif diff --git a/config/config.cmake b/config/config.cmake index ee90a169a..9773d395a 100644 --- a/config/config.cmake +++ b/config/config.cmake @@ -9,6 +9,10 @@ if(NOT DisableAdvancedSupport) set(DisableAdvancedSupport "false") endif() +if(NOT DisableStaticLibSupport) + set(DisableStaticLibSupport "false") +endif() + if(NOT SupportLTL) set(SupportLTL "true") endif() @@ -157,6 +161,20 @@ if(${SupportLTL} STREQUAL "true") set(LTL_Mode "Advanced") endif() + #设置LTL_LinkDirMod,Dynamic支持文件是否齐全,如果都在那么才开启Dynamic。 + set(LTL_LinkDirMod "") + if(${DisableStaticLibSupport} STREQUAL "true") + find_file(FOUND_FILE Dynamic ${VC_LTL_Root}/VC/${VC-LTLUsedToolsVersion}/lib/${PlatformShortName}/${OsPlatformName}) + if(NOT ${FOUND_FILE} STREQUAL "FOUND_FILE-NOTFOUND") + find_file(FOUND_FILE Dynamic ${VC_LTL_Root}/UCRT/${VC-LTLTargetUniversalCRTVersion}/lib/${PlatformShortName}) + if(NOT ${FOUND_FILE} STREQUAL "FOUND_FILE-NOTFOUND") + set(LTL_LinkDirMod "/Dynamic") + endif() + endif() + + endif() + + #打印VC-LTL图标 message("###################################################################################################") message("# #") @@ -175,11 +193,11 @@ if(${SupportLTL} STREQUAL "true") message(" VC-LTL Tools Version :" ${VC-LTLUsedToolsVersion}) message(" VC-LTL UCRT Version :" ${VC-LTLTargetUniversalCRTVersion}) message(" Platform :" ${PlatformShortName}) - message(" Using VC-LTL " ${OsPlatformName} " " ${LTL_Mode} " Mode") + message(" Using VC-LTL " ${OsPlatformName}${LTL_LinkDirMod} " " ${LTL_Mode} " Mode") message("") - set(VC_LTL_Include ${VC_LTL_Root}/config/${OsPlatformName};${VC_LTL_Root}/VC/${VC-LTLUsedToolsVersion}/include;${VC_LTL_Root}/VC/${VC-LTLUsedToolsVersion}/atlmfc/include;${VC_LTL_Root}/ucrt/${VC-LTLTargetUniversalCRTVersion}) - set(VC_LTL_Library ${VC_LTL_Root}/${PlatformShortName};${VC_LTL_Root}/${PlatformShortName}/${OsPlatformName}/${LTL_Mode};${VC_LTL_Root}/VC/${VC-LTLUsedToolsVersion}/lib/${PlatformShortName};${VC_LTL_Root}/VC/${VC-LTLUsedToolsVersion}/lib/${PlatformShortName}/${OsPlatformName};${VC_LTL_Root}/ucrt/${VC-LTLTargetUniversalCRTVersion}/lib/${PlatformShortName}) + set(VC_LTL_Include ${VC_LTL_Root}/config/${OsPlatformName}${LTL_LinkDirMod};${VC_LTL_Root}/VC/${VC-LTLUsedToolsVersion}/include;${VC_LTL_Root}/VC/${VC-LTLUsedToolsVersion}/atlmfc/include;${VC_LTL_Root}/ucrt/${VC-LTLTargetUniversalCRTVersion}) + set(VC_LTL_Library ${VC_LTL_Root}/${PlatformShortName};${VC_LTL_Root}/${PlatformShortName}/${OsPlatformName}/${LTL_Mode};${VC_LTL_Root}/VC/${VC-LTLUsedToolsVersion}/lib/${PlatformShortName};${VC_LTL_Root}/VC/${VC-LTLUsedToolsVersion}/lib/${PlatformShortName}/${OsPlatformName}${LTL_LinkDirMod};${VC_LTL_Root}/ucrt/${VC-LTLTargetUniversalCRTVersion}/lib/${PlatformShortName}${LTL_LinkDirMod}) #message("INCLUDE " $ENV{INCLUDE}) #message("LIB " $ENV{LIB}) diff --git a/config/config.cmd b/config/config.cmd index 000b3210a..cdde7e3f1 100644 --- a/config/config.cmd +++ b/config/config.cmd @@ -65,13 +65,16 @@ if /i "%SupportWinXP%" == "true" (set OsPlatformName=WinXP) else (set OsPlatform if /i "%DisableAdvancedSupport%" == "true" (set LTL_Mode=Light) else (set LTL_Mode=Advanced) -echo Using VC-LTL %OsPlatformName% %LTL_Mode% Mode +set LTL_LinkDirMod= +if /i "%DisableStaticLibSupport%" == "true" if exist "%VC_LTL_Root%\VC\%VC-LTLUsedToolsVersion%\lib\%PlatformShortName%\%OsPlatformName%\Dynamic" if exist "%VC_LTL_Root%\ucrt\%VC-LTLTargetUniversalCRTVersion%\lib\%PlatformShortName%\Dynamic" set LTL_LinkDirMod=\Dynamic + +echo Using VC-LTL %OsPlatformName%%LTL_LinkDirMod% %LTL_Mode% Mode ::޸Include -set INCLUDE=%VC_LTL_Root%\config\%OsPlatformName%;%VC_LTL_Root%\VC\%VC-LTLUsedToolsVersion%\include;%VC_LTL_Root%\VC\%VC-LTLUsedToolsVersion%\atlmfc\include;%VC_LTL_Root%\ucrt\%VC-LTLTargetUniversalCRTVersion%;%INCLUDE% +set INCLUDE=%VC_LTL_Root%\config\%OsPlatformName%%LTL_LinkDirMod%;%VC_LTL_Root%\VC\%VC-LTLUsedToolsVersion%\include;%VC_LTL_Root%\VC\%VC-LTLUsedToolsVersion%\atlmfc\include;%VC_LTL_Root%\ucrt\%VC-LTLTargetUniversalCRTVersion%;%INCLUDE% -set LIB=%VC_LTL_Root%\%PlatformShortName%;%VC_LTL_Root%\%PlatformShortName%\%OsPlatformName%\%LTL_Mode%;%VC_LTL_Root%\VC\%VC-LTLUsedToolsVersion%\lib\%PlatformShortName%;%VC_LTL_Root%\VC\%VC-LTLUsedToolsVersion%\lib\%PlatformShortName%\%OsPlatformName%;%VC_LTL_Root%\ucrt\%VC-LTLTargetUniversalCRTVersion%\lib\%PlatformShortName%;%LIB% +set LIB=%VC_LTL_Root%\%PlatformShortName%;%VC_LTL_Root%\%PlatformShortName%\%OsPlatformName%\%LTL_Mode%;%VC_LTL_Root%\VC\%VC-LTLUsedToolsVersion%\lib\%PlatformShortName%;%VC_LTL_Root%\VC\%VC-LTLUsedToolsVersion%\lib\%PlatformShortName%\%OsPlatformName%%LTL_LinkDirMod%;%VC_LTL_Root%\ucrt\%VC-LTLTargetUniversalCRTVersion%\lib\%PlatformShortName%%LTL_LinkDirMod%;%LIB% goto:eof diff --git a/config/config.props b/config/config.props index 196a28a75..4f697e09e 100644 --- a/config/config.props +++ b/config/config.props @@ -87,11 +87,17 @@ WinXP Vista + + \Dynamic + + - $(VCLibDirMod) + $(VCLibDirMod) - $(VC_LTL_Root)\config\$(OsPlatformName);$(VC_LTL_Root)\VC\$(VC-LTLUsedToolsVersion)\include;$(VC_LTL_Root)\VC\$(VC-LTLUsedToolsVersion)\atlmfc\include;$(VC_LTL_Root)\ucrt\$(VC-LTLTargetUniversalCRTVersion) - $(VC_LTL_Root)\$(PlatformShortName);$(VC_LTL_Root)\$(PlatformShortName)\$(OsPlatformName)\$(LTL_Mode);$(VC_LTL_Root)\VC\$(VC-LTLUsedToolsVersion)\lib\$(VC-LTLLibDirMod)$(PlatformShortName);$(VC_LTL_Root)\VC\$(VC-LTLUsedToolsVersion)\lib\$(VC-LTLLibDirMod)$(PlatformShortName)\$(OsPlatformName);$(VC_LTL_Root)\ucrt\$(VC-LTLTargetUniversalCRTVersion)\lib\$(PlatformShortName) + $(VC_LTL_Root)\config\$(OsPlatformName)$(LTL_LinkDirMod);$(VC_LTL_Root)\VC\$(VC-LTLUsedToolsVersion)\include;$(VC_LTL_Root)\VC\$(VC-LTLUsedToolsVersion)\atlmfc\include;$(VC_LTL_Root)\ucrt\$(VC-LTLTargetUniversalCRTVersion) + $(VC_LTL_Root)\$(PlatformShortName);$(VC_LTL_Root)\$(PlatformShortName)\$(OsPlatformName)\$(LTL_Mode);$(VC_LTL_Root)\VC\$(VC-LTLUsedToolsVersion)\lib\$(VC-LTLLibDirMod)$(PlatformShortName);$(VC_LTL_Root)\VC\$(VC-LTLUsedToolsVersion)\lib\$(VC-LTLLibDirMod)$(PlatformShortName)\$(OsPlatformName)$(LTL_LinkDirMod);$(VC_LTL_Root)\ucrt\$(VC-LTLTargetUniversalCRTVersion)\lib\$(PlatformShortName)$(LTL_LinkDirMod) @@ -109,16 +115,10 @@ _ATL_XP_TARGETING=1;%(PreprocessorDefinitions) - - _ATL_XP_TARGETING=1;_NO_CRT_STDIO_INLINE=1;_Build_By_LTL=1;_DISABLE_DEPRECATE_STATIC_CPPLIB=1;_STATIC_CPPLIB=1;%(PreprocessorDefinitions) - /Zc:threadSafeInit- %(AdditionalOptions) - - msvcrt_Platform.lib;ltl.lib;vc.lib;ucrt.lib;%(AdditionalDependencies) - 5.01 5.02 @@ -126,14 +126,6 @@ - - - _NO_CRT_STDIO_INLINE=1;_Build_By_LTL=1;_DISABLE_DEPRECATE_STATIC_CPPLIB=1;_STATIC_CPPLIB=1;%(PreprocessorDefinitions) - - - - msvcrt_Platform.lib;ltl.lib;vc.lib;ucrt.lib;%(AdditionalDependencies) - @@ -164,7 +156,7 @@ VC Tools Version : $(VC-LTLUsedToolsVersion) UCRT Version : $(VC-LTLTargetUniversalCRTVersion) Platform : $(PlatformShortName) - Using VC-LTL $(OsPlatformName) $(LTL_Mode) Mode + Using VC-LTL $(OsPlatformName)$(LTL_LinkDirMod) $(LTL_Mode) Mode " Importance="high" Condition="('$(SupportLTL)'=='true') Or ('$(SupportLTL)'=='ucrt')"/> @@ -173,7 +165,7 @@ - + diff --git a/src/LTL_Initialization.cpp b/src/LTL_Initialization.cpp index bcf46b0d2..f9c861eb1 100644 --- a/src/LTL_Initialization.cpp +++ b/src/LTL_Initialization.cpp @@ -2,6 +2,9 @@ #include + +#ifndef __Bulib_Dynamic_Lib + static void __cdecl __LTL_Unitialization() throw() { //__acrt_uninitialize_locks(false); @@ -10,20 +13,22 @@ static void __cdecl __LTL_Unitialization() throw() __acrt_uninitialize_winapi_thunks(false); } +#endif EXTERN_C int __cdecl __LTL_Initialization() throw() { //ȳʼ߼ָ֧ __isa_available_init(); - //Ҫ֧XPʱҪʼVistaϵͳֱʹ½ӿ +#ifndef __Bulib_Dynamic_Lib + //ʼwinapi_thunks __acrt_initialize_winapi_thunks(); //__acrt_initialize_locks(); atexit(__LTL_Unitialization); - +#endif return 0; } diff --git a/src/_msvcrt.cpp b/src/_msvcrt.cpp index 4a36e3706..14378da60 100644 --- a/src/_msvcrt.cpp +++ b/src/_msvcrt.cpp @@ -1,6 +1,6 @@ #pragma once -#if defined(NDEBUG)&&defined(_DLL)&&defined(_Build_By_LTL) +#if defined(NDEBUG)&&defined(_DLL)&&defined(__Build_LTL) #define _CRT_BEST_PRACTICES_USAGE #include @@ -73,6 +73,8 @@ extern "C" return true; } + _LCRT_DEFINE_IAT_SYMBOL(__scrt_initialize_onexit_tables); + /*void __std_terminate(void) { terminate(); @@ -139,6 +141,9 @@ extern "C" return InitializeCriticalSectionEx(critical_section, spin_count, flags); #endif } + + _LCRT_DEFINE_IAT_SYMBOL(__vcrt_InitializeCriticalSectionEx); + //int __scrt_debugger_hook_flag = 0; //void __cdecl _CRT_DEBUGGER_HOOK(int const reserved) @@ -304,6 +309,8 @@ extern "C" return memcpy_s(_S1, _N1 * sizeof(wchar_t), _S2, _N * sizeof(wchar_t)); } + _LCRT_DEFINE_IAT_SYMBOL(wmemcpy_s); + errno_t __CRTDECL wmemmove_s( _Out_writes_to_opt_(_N1, _N) wchar_t* _S1, _In_ rsize_t _N1, @@ -314,6 +321,7 @@ extern "C" return memmove_s(_S1, _N1 * sizeof(wchar_t), _S2, _N * sizeof(wchar_t)); } + _LCRT_DEFINE_IAT_SYMBOL(wmemmove_s); // int __cdecl __stdio_common_vswprintf( // _In_ unsigned __int64 _Options, diff --git a/src/frame_thunks.cpp b/src/frame_thunks.cpp index 2698c5255..35338a1e3 100644 --- a/src/frame_thunks.cpp +++ b/src/frame_thunks.cpp @@ -12,8 +12,6 @@ #include "ehdata.h" #include -EXTERN_C DWORD __cdecl __LTL_GetOsMinVersion(); - @@ -134,39 +132,4 @@ extern "C" void *__AdjustPointer( return pRet; } -#ifdef _X86_ -extern "C" void __stdcall _CallMemberFunction0(void *pthis, void *pmfn) -{ - - __asm - { - mov ecx, pthis - call pmfn - } -} -#endif - -#ifdef _X86_ -extern "C" void __stdcall _CallMemberFunction1(void *pthis, void *pmfn, void *pthat) -{ - __asm - { - push pthat - mov ecx, pthis - call pmfn - } -} -#endif - -#ifdef _X86_ -extern "C" void __stdcall _CallMemberFunction2(void *pthis, void *pmfn, void *pthat, int val2) -{ - __asm - { - push val2 - push pthat - mov ecx, pthis - call pmfn - } -} -#endif \ No newline at end of file +_LCRT_DEFINE_IAT_SYMBOL(__AdjustPointer); diff --git a/src/msvcrt_IAT.cpp b/src/msvcrt_IAT.cpp index 6d8911c6c..327bc88c0 100644 --- a/src/msvcrt_IAT.cpp +++ b/src/msvcrt_IAT.cpp @@ -1,10 +1,17 @@ #include "msvcrt_IAT.h" +#ifndef _LTL_Using_Dynamic_Lib + #define _LCRT_DEFINE_IAT_SYMBOL_EXTERN(f) \ extern "C" void __cdecl f(); \ _LCRT_DEFINE_IAT_SYMBOL(f) +#else + +#define _LCRT_DEFINE_IAT_SYMBOL_EXTERN _LCRT_DEFINE_IAT_SYMBOL + +#endif #ifdef _M_X64 @@ -247,7 +254,7 @@ _LCRT_DEFINE_IAT_SYMBOL_EXTERN(asinhf); _LCRT_DEFINE_IAT_SYMBOL_EXTERN(atanhf); _LCRT_DEFINE_IAT_SYMBOL_EXTERN(cbrtf); -_Check_return_ float __cdecl _chgsignf(_In_ float _X) +extern "C" _Check_return_ float __cdecl _chgsignf(_In_ float _X) { /* @@ -263,7 +270,7 @@ _Check_return_ float __cdecl _chgsignf(_In_ float _X) } _LCRT_DEFINE_IAT_SYMBOL(_chgsignf); -_Check_return_ float __cdecl copysignf(_In_ float _Number, _In_ float _Sign) +extern "C" _Check_return_ float __cdecl copysignf(_In_ float _Number, _In_ float _Sign) { *(unsigned long*)&_Number = ((*(unsigned long*)&_Number)&~0x80000000) | ((*(unsigned long*)&_Sign) & 0x80000000); @@ -271,7 +278,7 @@ _Check_return_ float __cdecl copysignf(_In_ float _Number, _In_ float _Sign) } _LCRT_DEFINE_IAT_SYMBOL(copysignf); -_Check_return_ float __cdecl _copysignf(_In_ float _Number, _In_ float _Sign) +extern "C" _Check_return_ float __cdecl _copysignf(_In_ float _Number, _In_ float _Sign) { *(unsigned long*)&_Number = ((*(unsigned long*)&_Number)&~0x80000000) | ((*(unsigned long*)&_Sign) & 0x80000000); @@ -287,7 +294,11 @@ _LCRT_DEFINE_IAT_SYMBOL_EXTERN(fdimf); _LCRT_DEFINE_IAT_SYMBOL_EXTERN(fmaf); _LCRT_DEFINE_IAT_SYMBOL_EXTERN(fmaxf); _LCRT_DEFINE_IAT_SYMBOL_EXTERN(fminf); + +#ifdef _M_IX86 _LCRT_DEFINE_IAT_SYMBOL_EXTERN(_hypotf); +#endif + _LCRT_DEFINE_IAT_SYMBOL_EXTERN(ilogbf); _LCRT_DEFINE_IAT_SYMBOL_EXTERN(lgammaf); _LCRT_DEFINE_IAT_SYMBOL_EXTERN(llrintf); diff --git a/src/msvcrt_IAT.h b/src/msvcrt_IAT.h index f70186e1d..802b5598b 100644 --- a/src/msvcrt_IAT.h +++ b/src/msvcrt_IAT.h @@ -24,6 +24,14 @@ #define _LCRT_DEFINE_IAT_SYMBOL_MAKE_NAME(f) _CRT_CONCATENATE(__imp_, f) #endif + +#ifndef _LTL_Using_Dynamic_Lib + #define _LCRT_DEFINE_IAT_SYMBOL(f) \ extern "C" __declspec(selectany) void const* const _LCRT_DEFINE_IAT_SYMBOL_MAKE_NAME(f) \ = reinterpret_cast(f) +#else + +#define _LCRT_DEFINE_IAT_SYMBOL(f) __pragma(comment(linker,"/EXPORT:" _LCRT_DECLARE_ALTERNATE_NAME_PREFIX #f)) + +#endif \ No newline at end of file diff --git a/src/trnsctrl.h b/src/trnsctrl.h index acc1d29fb..a4bdf0d9f 100644 --- a/src/trnsctrl.h +++ b/src/trnsctrl.h @@ -172,11 +172,35 @@ extern void __stdcall _JumpToContinuation(void *, EHRegistrationNode *); // // For calling member functions: // -extern "C" void __stdcall _CallMemberFunction0(void *pthis, void *pmfn); - -extern "C" void __stdcall _CallMemberFunction1(void *pthis, void *pmfn, void *pthat); - -extern "C" void __stdcall _CallMemberFunction2(void *pthis, void *pmfn, void *pthat, int val2); +__forceinline void __stdcall _CallMemberFunction0(void *pthis, void *pmfn) +{ + __asm + { + mov ecx, pthis + call pmfn + } +} + +__forceinline void __stdcall _CallMemberFunction1(void *pthis, void *pmfn, void *pthat) +{ + __asm + { + push pthat + mov ecx, pthis + call pmfn + } +} + +__forceinline void __stdcall _CallMemberFunction2(void *pthis, void *pmfn, void *pthat, int val2) +{ + __asm + { + push val2 + push pthat + mov ecx, pthis + call pmfn + } +} // // Translate an ebp-relative offset to a hard address based on address of diff --git a/src/ucrt/internal/winapi_thunks.cpp b/src/ucrt/internal/winapi_thunks.cpp index 09b2cbfe2..c0f617d7f 100644 --- a/src/ucrt/internal/winapi_thunks.cpp +++ b/src/ucrt/internal/winapi_thunks.cpp @@ -1473,8 +1473,8 @@ EXTERN_C DWORD WINAPI __crtGetCurrentProcessorNumber(void) } else { - //ִ֧˽ӿڣôٶֻһCPU - return 1; + //ִ֧˽ӿڣôٶǵ + return 0; } } @@ -2075,7 +2075,7 @@ namespace BOOLEAN NeedDeleteFile; } FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; - EXTERN_C DWORD __LTL_GetOsMinVersion() + EXTERN_C _LTLIMP DWORD __cdecl __LTL_GetOsMinVersion() { auto pPeb = ((TEB*)NtCurrentTeb())->ProcessEnvironmentBlock; @@ -2083,7 +2083,7 @@ namespace } - EXTERN_C UINT64 __LTL_GetOsVersion() + EXTERN_C _LTLIMP UINT64 __cdecl __LTL_GetOsVersion() { auto pPeb = ((TEB*)NtCurrentTeb())->ProcessEnvironmentBlock; @@ -2199,7 +2199,7 @@ namespace //XP֧CreateSymbolicLinkWֱʹNT APIʵΪ - EXTERN_C BOOLEAN + EXTERN_C _LTLIMP BOOLEAN WINAPI __crtCreateSymbolicLinkW( _In_ LPCWSTR lpSymlinkFileName, diff --git a/src/winapi_thunks.h b/src/winapi_thunks.h index 06c0ae779..a1975c82e 100644 --- a/src/winapi_thunks.h +++ b/src/winapi_thunks.h @@ -8,13 +8,13 @@ EXTERN_C_START #define MakeMiniVersion(v1,v2) (DWORD)(v2|(v1<<16)) #define MakeVersion(v1,v2,v3,v4) (UINT64)(((UINT64)(v4))|((UINT64)v3<<16)|((UINT64)v2<<32)|((UINT64)v1<<48)) -DWORD __cdecl __LTL_GetOsMinVersion(); +_LTLIMP DWORD __cdecl __LTL_GetOsMinVersion(); -UINT64 __cdecl __LTL_GetOsVersion(); +_LTLIMP UINT64 __cdecl __LTL_GetOsVersion(); #ifdef _ATL_XP_TARGETING -BOOL WINAPI __crtInitOnceExecuteOnce( +_LTLIMP BOOL WINAPI __crtInitOnceExecuteOnce( _Inout_ PINIT_ONCE InitOnce, _In_ PINIT_ONCE_FN InitFn, _Inout_opt_ PVOID Parameter, @@ -25,7 +25,7 @@ BOOL WINAPI __crtInitOnceExecuteOnce( #endif #ifdef _ATL_XP_TARGETING -VOID WINAPI __crtInitializeConditionVariable( +_LTLIMP VOID WINAPI __crtInitializeConditionVariable( _Out_ PCONDITION_VARIABLE ConditionVariable ); #else @@ -33,7 +33,7 @@ VOID WINAPI __crtInitializeConditionVariable( #endif #ifdef _ATL_XP_TARGETING -BOOL WINAPI __crtSleepConditionVariableCS( +_LTLIMP BOOL WINAPI __crtSleepConditionVariableCS( _Inout_ PCONDITION_VARIABLE ConditionVariable, _Inout_ PCRITICAL_SECTION CriticalSection, _In_ DWORD dwMilliseconds @@ -43,7 +43,7 @@ BOOL WINAPI __crtSleepConditionVariableCS( #endif #ifdef _ATL_XP_TARGETING -void WINAPI __crtWakeConditionVariable( +_LTLIMP void WINAPI __crtWakeConditionVariable( _Inout_ PCONDITION_VARIABLE ConditionVariable ); #else @@ -51,7 +51,7 @@ void WINAPI __crtWakeConditionVariable( #endif #ifdef _ATL_XP_TARGETING -VOID __crtWakeAllConditionVariable( +_LTLIMP VOID __crtWakeAllConditionVariable( _Inout_ PCONDITION_VARIABLE ConditionVariable ); #else @@ -59,7 +59,7 @@ VOID __crtWakeAllConditionVariable( #endif #ifdef _ATL_XP_TARGETING -VOID WINAPI __crtInitializeSRWLock( +_LTLIMP VOID WINAPI __crtInitializeSRWLock( _Out_ PSRWLOCK SRWLock ); #else @@ -67,7 +67,7 @@ VOID WINAPI __crtInitializeSRWLock( #endif #ifdef _ATL_XP_TARGETING -VOID WINAPI __crtAcquireSRWLockExclusive( +_LTLIMP VOID WINAPI __crtAcquireSRWLockExclusive( _Inout_ PSRWLOCK SRWLock ); #else @@ -75,12 +75,16 @@ VOID WINAPI __crtAcquireSRWLockExclusive( #endif //Win7ϰ汾 -BOOLEAN WINAPI __crtTryAcquireSRWLockExclusive( +_LTLIMP BOOLEAN WINAPI __crtTryAcquireSRWLockExclusive( _Inout_ PSRWLOCK SRWLock -); + ); + +_LTLIMP VOID WINAPI __acrt_GetSystemTimePreciseAsFileTime_advanced( + LPFILETIME const system_time + ); #ifdef _ATL_XP_TARGETING -VOID WINAPI __crtReleaseSRWLockExclusive( +_LTLIMP VOID WINAPI __crtReleaseSRWLockExclusive( _Inout_ PSRWLOCK SRWLock ); #else @@ -88,7 +92,7 @@ VOID WINAPI __crtReleaseSRWLockExclusive( #endif #ifdef _ATL_XP_TARGETING -BOOL WINAPI __crtSleepConditionVariableSRW( +_LTLIMP BOOL WINAPI __crtSleepConditionVariableSRW( _Inout_ PCONDITION_VARIABLE ConditionVariable, _Inout_ PSRWLOCK SRWLock, _In_ DWORD dwMilliseconds, @@ -98,22 +102,23 @@ BOOL WINAPI __crtSleepConditionVariableSRW( #define __crtSleepConditionVariableSRW SleepConditionVariableSRW #endif -BOOLEAN __cdecl __crt_are_win7_sync_apis_available(); +_LTLIMP BOOLEAN __cdecl __crt_are_win7_sync_apis_available(); #ifdef _ATL_XP_TARGETING -BOOLEAN __cdecl __crt_are_vista_sync_apis_available(); +_LTLIMP BOOLEAN __cdecl __crt_are_vista_sync_apis_available(); #else #define __crt_are_vista_sync_apis_available() true #endif #ifdef _ATL_XP_TARGETING -BOOLEAN __cdecl __crt__Is_vista_threadpool_supported(); +_LTLIMP BOOLEAN __cdecl __crt__Is_vista_threadpool_supported(); #else #define __crt__Is_vista_threadpool_supported() true #endif #ifdef _ATL_XP_TARGETING +_LTLIMP VOID WINAPI __crtFreeLibraryWhenCallbackReturns( @@ -125,6 +130,7 @@ __crtFreeLibraryWhenCallbackReturns( #endif #ifdef _ATL_XP_TARGETING +_LTLIMP VOID WINAPI __crtCloseThreadpoolWork( @@ -135,6 +141,7 @@ __crtCloseThreadpoolWork( #endif #ifdef _ATL_XP_TARGETING +_LTLIMP VOID WINAPI __crtSubmitThreadpoolWork( @@ -145,6 +152,7 @@ __crtSubmitThreadpoolWork( #endif #ifdef _ATL_XP_TARGETING +_LTLIMP PTP_WORK WINAPI __crtCreateThreadpoolWork( @@ -162,6 +170,7 @@ __crtCreateThreadpoolWork( #define __crtGetSystemTimePreciseAsFileTime __acrt_GetSystemTimePreciseAsFileTime #ifdef _ATL_XP_TARGETING +_LTLIMP BOOLEAN WINAPI __crtCreateSymbolicLinkW( @@ -195,19 +204,19 @@ PVOID __fastcall __CRT_EncodePointer(PVOID const Ptr); #endif #ifdef _ATL_XP_TARGETING -ULONGLONG WINAPI __crtGetTickCount64(VOID); +_LTLIMP ULONGLONG WINAPI __crtGetTickCount64(VOID); #else #define __crtGetTickCount64 GetTickCount64 #endif #if defined _ATL_XP_TARGETING && defined _X86_ -DWORD WINAPI __crtGetCurrentProcessorNumber(void); +_LTLIMP DWORD WINAPI __crtGetCurrentProcessorNumber(void); #else #define __crtGetCurrentProcessorNumber GetCurrentProcessorNumber #endif #ifdef _ATL_XP_TARGETING -VOID WINAPI __crtFlushProcessWriteBuffers(void); +_LTLIMP VOID WINAPI __crtFlushProcessWriteBuffers(void); #else #define __crtFlushProcessWriteBuffers FlushProcessWriteBuffers #endif @@ -219,7 +228,7 @@ VOID WINAPI __crtFlushProcessWriteBuffers(void); #endif #ifdef _ATL_XP_TARGETING -VOID WINAPI __crtSetThreadpoolTimer( +_LTLIMP VOID WINAPI __crtSetThreadpoolTimer( _Inout_ PTP_TIMER pti, _In_opt_ PFILETIME pftDueTime, _In_ DWORD msPeriod, @@ -230,7 +239,7 @@ VOID WINAPI __crtSetThreadpoolTimer( #endif #ifdef _ATL_XP_TARGETING -VOID WINAPI __crtSetThreadpoolWait( +_LTLIMP VOID WINAPI __crtSetThreadpoolWait( _Inout_ PTP_WAIT pwa, _In_opt_ HANDLE h, _In_opt_ PFILETIME pftTimeout @@ -240,7 +249,7 @@ VOID WINAPI __crtSetThreadpoolWait( #endif #ifdef _ATL_XP_TARGETING -VOID WINAPI __crtCloseThreadpoolWait( +_LTLIMP VOID WINAPI __crtCloseThreadpoolWait( _Inout_ PTP_WAIT pwa ); #else @@ -248,7 +257,7 @@ VOID WINAPI __crtCloseThreadpoolWait( #endif #ifdef _ATL_XP_TARGETING -VOID WINAPI __crtWaitForThreadpoolTimerCallbacks( +_LTLIMP VOID WINAPI __crtWaitForThreadpoolTimerCallbacks( _Inout_ PTP_TIMER pti, _In_ BOOL fCancelPendingCallbacks ); @@ -257,7 +266,7 @@ VOID WINAPI __crtWaitForThreadpoolTimerCallbacks( #endif #ifdef _ATL_XP_TARGETING -PTP_WAIT WINAPI __crtCreateThreadpoolWait( +_LTLIMP PTP_WAIT WINAPI __crtCreateThreadpoolWait( _In_ PTP_WAIT_CALLBACK pfnwa, _Inout_opt_ PVOID pv, _In_opt_ PTP_CALLBACK_ENVIRON pcbe @@ -267,7 +276,7 @@ PTP_WAIT WINAPI __crtCreateThreadpoolWait( #endif #ifdef _ATL_XP_TARGETING -VOID WINAPI __crtCloseThreadpoolTimer( +_LTLIMP VOID WINAPI __crtCloseThreadpoolTimer( _Inout_ PTP_TIMER pti ); #else @@ -275,7 +284,7 @@ VOID WINAPI __crtCloseThreadpoolTimer( #endif #ifdef _ATL_XP_TARGETING -PTP_TIMER WINAPI __crtCreateThreadpoolTimer( +_LTLIMP PTP_TIMER WINAPI __crtCreateThreadpoolTimer( _In_ PTP_TIMER_CALLBACK pfnti, _Inout_opt_ PVOID pv, _In_opt_ PTP_CALLBACK_ENVIRON pcbe