From 0b96be8721335fd0c0889c2a530da363a7cdf0ba Mon Sep 17 00:00:00 2001 From: mingkuang Date: Fri, 28 Jul 2017 20:37:36 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3BUG=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=97=A0=E6=B3=95=E4=BD=BF=E7=94=A8=5F=5Fargc?= =?UTF-8?q?=E3=80=81=5F=5Fargv=E3=80=81=5F=5Fwargv=E3=80=81=5Fenviron?= =?UTF-8?q?=E3=80=81=5Fwenviron=E5=85=A8=E5=B1=80=E5=8F=98=E9=87=8F?= =?UTF-8?q?=E9=97=AE=E9=A2=98=EF=BC=88=E6=84=9F=E8=B0=A2=20=E4=BA=AE?= =?UTF-8?q?=E5=8F=94=E5=8F=94=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ReadMe.md | 8 +++++++ VC-LTL.vcxitems | 3 +++ VC-LTL.vcxitems.filters | 9 ++++++++ _msvcrt.h | 2 ++ msvcrtp.def | 5 +++++ ucrt/10.0.10240.0/stdlib.h | 45 +++++++++++++++++++++++++++---------- ucrt/10.0.14393.0/stdlib.h | 45 +++++++++++++++++++++++++++---------- ucrt/10.0.15063.0/stdlib.h | 45 +++++++++++++++++++++++++++---------- x64/msvcrtp.lib | Bin 0 -> 1860 bytes x86/msvcrtp.lib | Bin 0 -> 1862 bytes 10 files changed, 126 insertions(+), 36 deletions(-) create mode 100644 msvcrtp.def create mode 100644 x64/msvcrtp.lib create mode 100644 x86/msvcrtp.lib diff --git a/ReadMe.md b/ReadMe.md index c84888126..1b0be5ac8 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -87,10 +87,18 @@ msvcrt_winxp.obj(WinXP 32)/msvcrt_win2003.obj(WinXP 64) * ltl140xp.lib/ltl141xp.lib VC2015/VC2017 XP模式 编译平台使用到的扩展函数,其内容通过编译_msvcrt.cpp得到 * msvcrt_base.lib Vista msvcrt.dll删除过的导出符号表(从原版中删除了一些无用符号,并且加入了helper.asm转发函数) * msvcrt_vista.lib Vista msvcrt.dll 原版符号表(从DDK提取) +* msvcrtp.lib 微软在msvcrt中导出的函数,但是并未在msvcrt.lib中提供的函数。 * ucrt_14393.lib/ucrt_15063.lib 从libucrt.lib提取的一些原有lib不支持的函数集合。 * vc140.lib/vc141.lib 从msvcrt.lib提取的一些原有lib不支持的函数集合。 ## Changes: +1.0.0.10 2017-07-28 20:28 +* 解决BUG 9,某些时候编译器引用异常导致XP模式时意外引入_except_handler4_common(感谢 HwangBae) +* 解决BUG 8,修复typeid功能无法使用问题(感谢 HwangBae) +* 调整异常实现代码,尽可能复用msvcrt.dll代码减少代码体积 +* 解决BUG,修复无法使用__argc、__argv、__wargv、_environ、_wenviron全局变量问题(感谢 亮叔叔) +* 解决微软BUG,修复使用ATL库的程序不支持XP RTM问题 + 1.0.0.9 2017-05-26 14:46 * 改进Windows XP支持 * 优化库结构裁剪ltl库体积 diff --git a/VC-LTL.vcxitems b/VC-LTL.vcxitems index 970f96e16..59b818e08 100644 --- a/VC-LTL.vcxitems +++ b/VC-LTL.vcxitems @@ -986,6 +986,7 @@ + @@ -997,6 +998,7 @@ + @@ -1011,6 +1013,7 @@ + diff --git a/VC-LTL.vcxitems.filters b/VC-LTL.vcxitems.filters index 209437984..319b82579 100644 --- a/VC-LTL.vcxitems.filters +++ b/VC-LTL.vcxitems.filters @@ -3022,6 +3022,12 @@ Libx86 + + Libx64 + + + Libx86 + @@ -3815,6 +3821,9 @@ 源代码\VC\141\atlmfc\include + + 源代码 + diff --git a/_msvcrt.h b/_msvcrt.h index 00b77ecc3..0bc452a69 100644 --- a/_msvcrt.h +++ b/_msvcrt.h @@ -94,5 +94,7 @@ //导入Windows Vista 动态库 msvcrt.dll #pragma comment(lib,"msvcrt_base.lib") +//导入msvcrt补充库 +#pragma comment(lib,"msvcrtp.lib") #endif //NDEBUG&&_DLL \ No newline at end of file diff --git a/msvcrtp.def b/msvcrtp.def new file mode 100644 index 000000000..e16527a76 --- /dev/null +++ b/msvcrtp.def @@ -0,0 +1,5 @@ +LIBRARY msvcrt.dll + +EXPORTS +_environ +_wenviron diff --git a/ucrt/10.0.10240.0/stdlib.h b/ucrt/10.0.10240.0/stdlib.h index d3d011050..815428d3a 100644 --- a/ucrt/10.0.10240.0/stdlib.h +++ b/ucrt/10.0.10240.0/stdlib.h @@ -1155,13 +1155,25 @@ __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(errno_t, _splitpath_s, char, _Dest) #endif // __STDC_WANT_SECURE_LIB__ - - - _ACRTIMP int* __cdecl __p___argc (void); - _ACRTIMP char*** __cdecl __p___argv (void); - _ACRTIMP wchar_t*** __cdecl __p___wargv(void); - - #ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY + _ACRTIMP extern int __argc; + _ACRTIMP extern char** __argv; + _ACRTIMP extern wchar_t** __wargv; + + + __inline int* __cdecl __p___argc(void) + { + return &__argc; + } + __inline char*** __cdecl __p___argv(void) + { + return &__argv; + } + __inline wchar_t*** __cdecl __p___wargv(void) + { + return &__wargv; + } + + /*#ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY extern int __argc; extern char** __argv; extern wchar_t** __wargv; @@ -1169,16 +1181,25 @@ __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(errno_t, _splitpath_s, char, _Dest) #define __argc (*__p___argc()) // Pointer to number of command line arguments #define __argv (*__p___argv()) // Pointer to table of narrow command line arguments #define __wargv (*__p___wargv()) // Pointer to table of wide command line arguments - #endif + #endif*/ - _DCRTIMP char*** __cdecl __p__environ (void); - _DCRTIMP wchar_t*** __cdecl __p__wenviron(void); + _ACRTIMP extern char ** _environ; + _ACRTIMP extern wchar_t ** _wenviron; + + __inline char*** __cdecl __p__environ(void) + { + return &_environ; + } + __inline wchar_t*** __cdecl __p__wenviron(void) + { + return &_wenviron; + } #ifndef _CRT_BEST_PRACTICES_USAGE #define _CRT_V12_LEGACY_FUNCTIONALITY #endif - #ifndef _CRT_V12_LEGACY_FUNCTIONALITY + /*#ifndef _CRT_V12_LEGACY_FUNCTIONALITY // Deprecated symbol: Do not expose environment global pointers unless // legacy access is specifically requested #define _environ crt_usage_error__do_not_reference_global_pointer_directly__environ @@ -1186,7 +1207,7 @@ __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(errno_t, _splitpath_s, char, _Dest) #else #define _environ (*__p__environ()) // Pointer to narrow environment table #define _wenviron (*__p__wenviron()) // Pointer to wide environment table - #endif + #endif*/ diff --git a/ucrt/10.0.14393.0/stdlib.h b/ucrt/10.0.14393.0/stdlib.h index 926751086..e1e7cefe0 100644 --- a/ucrt/10.0.14393.0/stdlib.h +++ b/ucrt/10.0.14393.0/stdlib.h @@ -1159,13 +1159,25 @@ __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(errno_t, _splitpath_s, char, _Dest) #endif // __STDC_WANT_SECURE_LIB__ - - - _ACRTIMP int* __cdecl __p___argc (void); - _ACRTIMP char*** __cdecl __p___argv (void); - _ACRTIMP wchar_t*** __cdecl __p___wargv(void); - - #ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY + _ACRTIMP extern int __argc; + _ACRTIMP extern char** __argv; + _ACRTIMP extern wchar_t** __wargv; + + + __inline int* __cdecl __p___argc(void) + { + return &__argc; + } + __inline char*** __cdecl __p___argv(void) + { + return &__argv; + } + __inline wchar_t*** __cdecl __p___wargv(void) + { + return &__wargv; + } + + /*#ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY extern int __argc; extern char** __argv; extern wchar_t** __wargv; @@ -1173,16 +1185,25 @@ __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(errno_t, _splitpath_s, char, _Dest) #define __argc (*__p___argc()) // Pointer to number of command line arguments #define __argv (*__p___argv()) // Pointer to table of narrow command line arguments #define __wargv (*__p___wargv()) // Pointer to table of wide command line arguments - #endif + #endif*/ + + _ACRTIMP extern char ** _environ; + _ACRTIMP extern wchar_t ** _wenviron; - _DCRTIMP char*** __cdecl __p__environ (void); - _DCRTIMP wchar_t*** __cdecl __p__wenviron(void); + __inline char*** __cdecl __p__environ(void) + { + return &_environ; + } + __inline wchar_t*** __cdecl __p__wenviron(void) + { + return &_wenviron; + } #ifndef _CRT_BEST_PRACTICES_USAGE #define _CRT_V12_LEGACY_FUNCTIONALITY #endif - #ifndef _CRT_V12_LEGACY_FUNCTIONALITY + /*#ifndef _CRT_V12_LEGACY_FUNCTIONALITY // Deprecated symbol: Do not expose environment global pointers unless // legacy access is specifically requested #define _environ crt_usage_error__do_not_reference_global_pointer_directly__environ @@ -1190,7 +1211,7 @@ __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(errno_t, _splitpath_s, char, _Dest) #else #define _environ (*__p__environ()) // Pointer to narrow environment table #define _wenviron (*__p__wenviron()) // Pointer to wide environment table - #endif + #endif*/ diff --git a/ucrt/10.0.15063.0/stdlib.h b/ucrt/10.0.15063.0/stdlib.h index 2d25c01c5..549953f7b 100644 --- a/ucrt/10.0.15063.0/stdlib.h +++ b/ucrt/10.0.15063.0/stdlib.h @@ -1170,13 +1170,25 @@ __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(errno_t, _splitpath_s, char, _Dest) #endif // __STDC_WANT_SECURE_LIB__ - - - _ACRTIMP int* __cdecl __p___argc (void); - _ACRTIMP char*** __cdecl __p___argv (void); - _ACRTIMP wchar_t*** __cdecl __p___wargv(void); - - #ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY + _ACRTIMP extern int __argc; + _ACRTIMP extern char** __argv; + _ACRTIMP extern wchar_t** __wargv; + + + __inline int* __cdecl __p___argc(void) + { + return &__argc; + } + __inline char*** __cdecl __p___argv(void) + { + return &__argv; + } + __inline wchar_t*** __cdecl __p___wargv(void) + { + return &__wargv; + } + + /*#ifdef _CRT_DECLARE_GLOBAL_VARIABLES_DIRECTLY extern int __argc; extern char** __argv; extern wchar_t** __wargv; @@ -1184,16 +1196,25 @@ __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(errno_t, _splitpath_s, char, _Dest) #define __argc (*__p___argc()) // Pointer to number of command line arguments #define __argv (*__p___argv()) // Pointer to table of narrow command line arguments #define __wargv (*__p___wargv()) // Pointer to table of wide command line arguments - #endif + #endif*/ + + _ACRTIMP extern char ** _environ; + _ACRTIMP extern wchar_t ** _wenviron; - _DCRTIMP char*** __cdecl __p__environ (void); - _DCRTIMP wchar_t*** __cdecl __p__wenviron(void); + __inline char*** __cdecl __p__environ(void) + { + return &_environ; + } + __inline wchar_t*** __cdecl __p__wenviron(void) + { + return &_wenviron; + } #ifndef _CRT_BEST_PRACTICES_USAGE #define _CRT_V12_LEGACY_FUNCTIONALITY #endif - #ifndef _CRT_V12_LEGACY_FUNCTIONALITY + /*#ifndef _CRT_V12_LEGACY_FUNCTIONALITY // Deprecated symbol: Do not expose environment global pointers unless // legacy access is specifically requested #define _environ crt_usage_error__do_not_reference_global_pointer_directly__environ @@ -1201,7 +1222,7 @@ __DEFINE_CPP_OVERLOAD_SECURE_FUNC_SPLITPATH(errno_t, _splitpath_s, char, _Dest) #else #define _environ (*__p__environ()) // Pointer to narrow environment table #define _wenviron (*__p__wenviron()) // Pointer to wide environment table - #endif + #endif*/ diff --git a/x64/msvcrtp.lib b/x64/msvcrtp.lib new file mode 100644 index 0000000000000000000000000000000000000000..b7ab7822efe575faa72a911bdbe9c8b71ae63a76 GIT binary patch literal 1860 zcmcIlyKd7^82)UN0v1Bywt+BJB`!mn7`sX(gj^^RQPVU^(}Bq~aiNi#rbdn`4`L2Yo%&^sphw~cN(28 ze7~|%E}xX+qfijy`pcEdfg^SW$EPF8c2+g2aR@Xi(K6cH0}5}eS=iNzUfdAdqCvvy5dB!2|H59 zVI8`JSjSB`%)iTrT>N#QC@BUys&xKKUyZ9vY-cu}@vx^yUGg>ZjQu;kOF|)v&s3K@ zR!r`aFN%Wab6#i_Jwpa*--xUZWRRXd|9pj`_LMVkI5!FqjG+nTonk3LjO;e?zNM*qV zI0lD6>ZS)k6$=jFLv&4f&z`Xz(n5m5L^JPaX8hjwekS*y`u*niGjqWj9)+S^a9r26 zi^Fd%dPA(d+;~y1)Eet`(cM32_6HE6 zy6JhN`}h*Wx26T7uvfAoqlhZxK4LZjLIL912H=>y2S)thTxrOz^MV` zNI0AU0-6LF8gyKuUxt1Lc{DlBQU4S7BYZIkA!7ET=tM!ww{~_S#DB}8yQK2DWqO){ zcJAYAld#SaHinmPwcosdH@^{yK$)1&N|3aS?DKr5Yt0#QdZgCd;7h&1M6Y^k>ypY ztI_uG%C`6-e*ly-=CZVMerJ&wArG3p?jE^%Z!NP+lFG10L89xrn6*MTQeVxpr)>%Y|2w5r5$m*QUcG(D`6uc2q`-}zP23b&Fa zRV9y=maF885+vm+`5)OIC#QGGhYKI1R2h!fTh3xB6}70hevpMI!{XIAW#$)hwqw%( literal 0 HcmV?d00001