Visual c++ 为什么ucrtbase导出CxxThrowException? 为什么ucrtbase.dll和vcruntime140.dll在它们根据依赖关系导出的一些函数中重叠?
免责声明:这是目前我纯粹的学术兴趣 我目前正在尝试了解Microsoft Visual C++CRT相关DLL文件的布局。在此处查找UCRT和文件的一般信息:Visual c++ 为什么ucrtbase导出CxxThrowException? 为什么ucrtbase.dll和vcruntime140.dll在它们根据依赖关系导出的一些函数中重叠?,visual-c++,dllexport,msvcrt,vcredist,universal-crt,Visual C++,Dllexport,Msvcrt,Vcredist,Universal Crt,免责声明:这是目前我纯粹的学术兴趣 我目前正在尝试了解Microsoft Visual C++CRT相关DLL文件的布局。在此处查找UCRT和文件的一般信息: 简而言之,对于一个普通的C++应用程序,运行时有这些(Topple)DLL依赖关系: ucrtbase.dll-“独立于编译器”的东西 vcruntime.dll-“依赖于编译器”的东西 代码> MVCP.DLL< /COD> -C++标准库 从该信息中可以突出显示的内容是: 从博客条目: 。。。将CRT拆分为两个逻辑部分:V
简而言之,对于一个普通的C++应用程序,运行时有这些(Topple)DLL依赖关系:
-“独立于编译器”的东西ucrtbase.dll
-“依赖于编译器”的东西vcruntime.dll
ucrtbase.dll
导出的,正如上面两个引号所指出的那样,我本以为这种机制完全属于编译器特定的方面
在写这篇文章时,我注意到了一些其他的重叠:一些标准的C库函数(memcpy
,…,strstr
,…)也从vcruntime140.dll
导出,尽管我希望它们只存在于ucrtbase
中
那么这里发生了什么,我能从中学到什么呢?通用CRT(ucrtbase.dll)包含一个VCRuntime的私有副本,供Windows操作系统组件使用。VCRuntime的此私有副本是操作系统的内部实现细节,可能随时更改(即,没有任何应用程序兼容性保证)
在任何情况下都不要使用通用CRT中的这些导出。(Windows SDK中没有库为这些导出提供可链接的符号,因此不可能意外使用它们。)希望在密切投票警察推翻你的学术问题之前得到答案……这是“基础”在C++中抛出异常是很基础的,也是在WRRT应用程序中做的事情。WinRT与“编译器无关”的PATH无关。所以它只是一个实现工件。谢谢。