问题标签 [msvcrt]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
549 浏览

c++ - DBGHelp.dll 导致在调试版本中加载 msvcrt.dll

我的应用程序使用 VC6 sp6 编译,使用 DBGHelp.lib 获取堆栈信息。该代码在调试和发布编译中是相似的。问题是在执行调试版本时,DBGHelp.dll 会加载 msvcrt.dll(发布版本)。无论如何,我的调试链接已经加载了 msvcrtd.dll。所以我最终在调试版本的过程中同时拥有 msvcrtd.dll 和 msvcrt.dll。dsp设置为加载默认库,根本没有直接提到msvcrt(d).lib。如果我取出使用 DBGHelp.dll 的代码并从 dsp 链接列表中删除 DBGHelp.lib,则不会加载 msvcrt.dll。

我该如何解决?

我只需要在我的调试执行中使用 msvcrtd.dll。

是否有用于调试的特殊版本的 DBGHelp.dll(将使用 msvcrtd.dll)?

0 投票
1 回答
2078 浏览

visual-studio-2008 - 多个 CRT:Visual Studio 2008 创建 DLL,其清单依赖于 VC80 和 VC90 CRT

我一直在研究为什么我们的开放场景图插件的调试版本无法正确加载(错误代码 14001,ERROR_SXS_CANT_GEN_ACTCTX)。经过多次谷歌搜索,我发现问题在于,例如 freetype 调试 dll 有一个依赖于 VC90 和 VC80 调试 crts 的清单。

由于我使用 Visual Studio 2008(使用 cmake 生成)从头开始构建 DLL,因此我想不出任何原因导致存在对 VC80 调试 crt 的依赖。而且由于没有安装 VS 2005,我没有任何调试 CRT,重新分发是非法的,所以我需要弄清楚这一点。

在dll上使用依赖walker,我发现的唯一crt dll是

  • msvcr90d.dll
  • msvcp90d.dll
  • msvcrt.dll

此处未提及任何 vc80 crts。那么这是从哪里来的呢?

这是 dll 的清单。

附加信息:

链接器命令行:

清单命令行:

0 投票
3 回答
1717 浏览

windows - 用户可能安装了哪些 Visual C++ 运行时?

用户可能安装了哪些 Visual C++ 运行时?

更新:这个问题更像是“部署基于 Internet 的应用程序的最佳方式是什么,用 C++ 编写。这需要 Microsoft Visual C++ 运行时。”

0 投票
1 回答
1188 浏览

assemblies - 如何修复 CRT 依赖性导致我的 vc2005 混合模式 DLL 在 XP 上出现 FileLoadException?

我在 Visual Studio 2005 中构建了一个混合模式 DLL。在依赖项walker 中,我的 DLL 显示了以下 CRT Dlls 的依赖项。请注意,这是在我的 Windows 7 开发机器上。

c:\windows\winsxs\x86_microsoft.vc80.crt_1fc8b3b9a1e18e3b_8.0.50727.4927_none_d08a205e442db5b5\MSVCP80.DLL

"\MSVCR80.DLL

"\MSVCM80.DLL

8.0.50727.4927

在我使用 Visual Studio 2005 的 Windows 7 开发机器上,它编译并运行得很好。问题是它不会在我安装了最新 CRT 的 Windows XP 测试机器上运行。

当我将 DLL 拖到 XP 机器上的 depenency walker 中时,它似乎正在搜索 \System32 中的 DLL...(我去显示完整路径并且没有它们的路径,只有一个黄色感叹号)

问题是WinSxS中这个版本(build 4927)的crt没有安装在XP测试机上。它具有安装了最新 CRT (sp1?) 的 Visual Studio 2005。

8.0.50727.4053是我可以在 MSDN 上找到的最新版本。

我意识到这不是 SO 上发布的最令人兴奋的问题,但是有人知道这个 4927 运行时是怎么回事吗?

* 编辑 *

MT.exe 生成的清单:

因此,它针对的是 3 个不同的版本...

0 投票
4 回答
4249 浏览

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

MS Visual C++ 运行时库中有什么?我的意思是,我用谷歌搜索了它,我总是找到诸如帮助之类的东西,app xxxx 给了我 MS Visual C++ 运行时库错误,没有任何解释。

我以为 Windows C 运行时库随 Windows 一起提供?不使用 VC++?谢谢。

编辑:首先,感谢您的回答。我现在对 Windows 中的运行时库有一个坏主意。我的意思是,第一部分,Windows 内部有它的 win32 API,所以,没关系,我知道。此外,Win32API 来自内核和用户部分。

但我一直认为像 GDI 这样的函数是作为 DLL 访问的(我仍然相信它们是)。但我认为甚至printf在某些 Windows 文件中也有类似的功能。

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

我的意思是,让我们说 GDI,我告诉它画图,它在用户模式下完成所有艰苦的工作,而不是调用将所有内容放入帧缓冲区的内核函数?

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

0 投票
2 回答
532 浏览

c++ - 分配一定数量的字节时中断

_CrtDumpMemoryLeaks();如果您不知道,这是一个转储程序中所有内存泄漏的函数。我的当前显示我有 3632062 字节的内存泄漏(它没有被释放)。

我想知道:当分配了一定数量的字节时,有什么方法可以导致 Visual C++ Express 中断?这样我可以在分配 3632062 字节时中断,然后读取堆栈跟踪以查看我分配它的位置。

这是目前我能想到的查找内存分配位置以便修复它的唯一方法。我一直在搜索我的代码,但我找不到任何需要分配 3632062 字节的地方(因为我加载的唯一文件是 2767136 字节..)虽然我确定泄漏与我的文件有关m 操作。

找到内存泄漏源的任何想法?我正在使用本机 C++、Visual C++ 2010

0 投票
4 回答
3446 浏览

c++ - 如何初始化 msvcrt.dll?

如果我执行 LoadLibrary("msvcrt.dll") 是否需要以某种方式初始化 CRT?以下文档中的第 2 节似乎说我这样做了,但是当我尝试调用 _CRT_INIT 时,我只是收到了 _CRT_INIT 的未定义符号错误:

http://support.microsoft.com/kb/94248

编辑:我应该说这是一个动态加载它使用的所有 dll 的程序,因此调用 LoadLibrary("msvcrt.dll")。

0 投票
2 回答
3285 浏览

winapi - malloc 和 HeapAlloc 之间是否存在根本区别(除了可移植性)?

由于各种原因,我正在尝试将代码从 C 运行时移植到使用 Windows 堆 API 的代码。我遇到了一个问题:如果我将 /// 调用重定向到// ( mallocwith for the handle ) ,内存似乎分配正确(没有返回错误指针,也没有抛出异常),但是我的库由于某种原因,移植说“未能分配内存”。callocreallocfreeHeapAllocHeapReAllocHeapFreeGetProcessHeap

我已经用 Microsoft CRT(它在下面使用 Heap API)和另一家公司的运行时库(它在下面使用 Global Memory API)尝试了这个;两者的 malloc 都适用于库,但由于某种原因,直接使用堆 API 不起作用。

我检查了分配不是太大(> = 0x7FFF8 字节),但它们不是。

我能想到的唯一问题是内存对齐;是这样吗?或者除此之外,堆 API 和 CRT 内存 API 之间是否存在我不知道的根本区别?

如果是这样,它是什么?如果不是,那么为什么静态Microsoft CRT(包含在 Visual Studio 中)在调用malloc/calloc之前会采取一些额外的步骤HeapAlloc?我怀疑有区别,但我想不出它可能是什么。

谢谢!

0 投票
1 回答
463 浏览

c - 用VC2010编译Python扩展

我有一些用 C++0x 编写的代码,我想将它们作为扩展暴露给 Python 2.7。

由于它使用了几个 C++0x 特性,我不想用 C++03 重写它,所以我不得不使用 VC2010。然而,默认的 Python 2.7 安装是使用 VC2008 编译的。

我发现这篇文章解释了如何强制 distutils 使用 VC2010,但评论者指出这将导致 msvcr90.dll(由解释器链接)和 msvcr100.dll(由扩展名链接)之间的 DLL 冲突。

有没有办法在VC2010中编译扩展而无需重新编译Python?

(我最近才开始在 Windows 上编程,所以我对动态链接在那里的工作方式没有确切的了解)

0 投票
2 回答
2586 浏览

visual-studio - 正在加载哪个版本的 C 运行时库 (CRT)?

我有一个错误,我怀疑可能是由于在运行 Windows 7 的两台计算机上加载了不同版本的 CRT 造成的。如何确定正在加载 winsxs 文件夹中的 MSVCR90.dll 版本?

我的程序是由另一个 EXE 加载的 DLL。它是使用 Visual Studio 2008 SP1 编译的。