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