MS Visual C++运行时库 - 用于什么?

B.G*_*ill 6 c++ msvcrt

MS Visual C++运行时库中有什么?我的意思是,我google了它,我总是发现像帮助,app xxxx给我MS Visual C++运行时库错误,没有解释.

我认为Windows C运行时库附带Windows?不是用VC++?谢谢.

编辑:首先,谢谢你的答案.我现在对Windows中的运行时库不太了解.我的意思是,第一部分,Windows内部有它的win32 API,所以,没关系,我知道.此外,Win32API来自内核和用户部分.

但我一直认为像GDI这样的函数是作为DLL访问的(我仍然认为它们是).但我认为即使是像printf某些Windows文件中的函数也是如此.

所以,我是对的,当我知道"简单"函数printf需要直接链接而不是直接使用OS的内核部分时,更复杂的Windows API函数作为dll链接,因此不与编译器一起分发但是用OS?他们随后访问内核?

我的意思是,让我们说GDI,我告诉它画画,它在用户模式下做了所有的努力,而不是调用内核函数把它全部放在帧缓冲中?

最后想到,为什么这样解决了呢?我的意思是,如果VC++运行时只是C和WinAPI之间的层,为什么VC++不能直接调用WinAPI?

Joh*_*ing 6

这是一个过于简单化,但它会给你一个要点.MSVCRT是一组实现C++语言部分的DLL.功能,如printf,memcpy和等在这些DLL中实现.

使用特定编译器编译并动态链接到C++运行时的每个程序必须以某种方式在目标计算机上具有正确版本的CRT二进制文件.因此,发送给最终用户的应用程序通常(通常是?)也附带这些DLL的包.这个包被称为"可再发行"(或"redist"),并且对于确切的编译器版本和目标平台的每个组合都有不同的包.例如,以下各项都有单独的和不同的redists:

  • MSVC 10,64位窗口
  • MSVC 10,32位窗口
  • MSVC9,64位窗口
  • MSVC9 SP1,64位窗口

等等.

是的,Windows通常"附带"某些版本的CRT.但是,它附带了运行Windows附带的应用程序所需的版本.如果Windows及其所有应用程序都是在MSVC8 SP2中编译的,并且您的应用程序是在MSVC10中编译的,那么需要的CRT 将不会出现在框中,因为它运行的是Windows.

这就是为什么通常的做法是将应用程序与redists一起发布.

编辑:

通过像魔术一样的胡迪尼,我预测你的下一个问题将是"我在哪里得到红人?"

答案是来自MicroSoft.尝试谷歌搜索"msvc 9 x64 redist",你会发现:

http://www.microsoft.com/downloads/en/details.aspx?familyid=bd2a6171-e2d6-4230-b809-9a8d7548c1b6&displaylang=en


Mac*_*cke 5

一个简短的答案是,MSVS C/C++ 运行时实现了诸如 malloc/free、stdio、iostream 之类的函数以及一些诸如dynamic_cast 和异常处理之类的 C++ 功能。这些在 Visual Studio 版本之间有所不同,因此不同版本有不同的运行时。

Windows 大多附带 C API(Win32 API),它与 C/C++ 标准库有很大不同。MSVS C/C++ 运行时调用此 API 来分配内存等。

(我想 Windows 中包含的一些应用程序是用 MSVS 和 C++ 编写的,因此它们确实包含该版本的 MSVS 运行时。)

此外,随着新的 Visual Studio 版本的发布,运行时也会发生变化。Windows 版本的持续时间比这长得多。