而且事实上,你在VS2017编译lib静态库(/MTd,声明为CRT是静态库),而主程VS2019为/MDd(声明CRT为动态库),直接报错是肯定的(引入的C/C++运行时lib名就完全不一致,链接阶段官方直接给出错误):
测试完输出结果:=== Global State Conflict Test ===
Testing CRT global state sharing between VS2017 and VS2019
============================================================
STEP 1: VS2019 Setting Initial Global State
============================================================
=== VS2019 Global State Test Started ===
=== VS2019 Setting Locale ===
VS2019: French locale number: 1234,56
VS2019: French date: jeudi, 19 mars 2026
VS2019: Current locale: French_France.1252
=== VS2019 Setting Terminate Handler ===
VS2019: Terminate handler set
VS2019: Previous handler was: set
=== VS2019 Setting New Handler ===
VS2019: New handler set
VS2019: Previous new handler was: null
=== VS2019 Setting Environment ===
VS2019: _putenv result: 0
VS2019: VS2019_VAR = FromVS2019CRT
VS2019: SHARED_VAR = VS2019_Modified
=== VS2019 Setting Timezone ===
VS2019: Timezone set to EST
VS2019: Current time offset: 18000 seconds
VS2019: Daylight saving: Yes
=== VS2019 Global State Test Completed ===
=== VS2019 Checking Current State ===
VS2019: Current locale: French_France.1252
VS2019: VS2017_VAR = NULL
VS2019: SHARED_VAR = VS2019_Modified
VS2019: VS2019_VAR = FromVS2019CRT
VS2019: Number format test: 1234.56
============================================================
STEP 2: Calling VS2017 Library
============================================================
=== VS2017 Global State Test Started ===
=== VS2017 Setting Locale ===
VS2017: German locale number: 1234,56
VS2017: German date: Donnerstag, 19 M?rz 2026
VS2017: Current locale: German_Germany.1252
=== VS2017 Setting Terminate Handler ===
VS2017: Terminate handler set
VS2017: Previous handler was: set
=== VS2017 Setting New Handler ===
VS2017: New handler set
VS2017: Previous new handler was: set
=== VS2017 Setting Environment ===
VS2017: _putenv result: 0
VS2017: VS2017_VAR = FromVS2017CRT
VS2017: SHARED_VAR = VS2017_Setting
=== VS2017 Setting Timezone ===
VS2017: Timezone set to PST
VS2017: Current time offset: 28800 seconds
VS2017: Daylight saving: Yes
=== VS2017 Global State Test Completed ===
============================================================
STEP 3: VS2019 Checking State After VS2017 Call
============================================================
=== VS2019 Checking Current State ===
VS2019: Current locale: German_Germany.1252
VS2019: VS2017_VAR = FromVS2017CRT
VS2019: SHARED_VAR = VS2017_Setting
VS2019: VS2019_VAR = FromVS2019CRT
VS2019: Number format test: 1234.56
============================================================
STEP 4: VS2017 Checking Current State
============================================================
=== VS2017 Checking Current State ===
VS2017: Current locale: German_Germany.1252
VS2017: VS2017_VAR = FromVS2017CRT
VS2017: SHARED_VAR = VS2017_Setting
VS2017: VS2019_VAR = FromVS2019CRT
VS2017: Number format test: 1234.56
============================================================
STEP 5: VS2019 Modifying State Again
============================================================
VS2019: Set locale to English and added FINAL_VAR
============================================================
FINAL STATE CHECK
============================================================
=== VS2019 Checking Current State ===
VS2019: Current locale: English_United States.1252
VS2019: VS2017_VAR = FromVS2017CRT
VS2019: SHARED_VAR = VS2017_Setting
VS2019: VS2019_VAR = FromVS2019CRT
VS2019: Number format test: 1234.56
=== VS2017 Checking Current State ===
VS2017: Current locale: English_United States.1252
VS2017: VS2017_VAR = FromVS2017CRT
VS2017: SHARED_VAR = VS2017_Setting
VS2017: VS2019_VAR = FromVS2019CRT
VS2017: Number format test: 1234.56
=== Test Conclusions ===
If global state is shared:
- VS2017 and VS2019 should see the same locale
- Environment variables should be visible to both
- Timezone changes should affect both
If global state is separate:
- Each CRT should maintain its own state
- Changes in one should not affect the other
上边只是测了,纯静态库的版本(对跨VS版本的CRT静态库上是没问题的),那其实还可以测一下主程是声明CRT静态库下,去用动态库编译的模块会怎么样?这个我放在另起一个文章的实验场景中: