问题标签 [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.
visual-studio-2010 - Dependency Walker 错误:“ABC.DLL”的并排配置信息包含错误
我正在运行我在 Visual Studio 2010 中构建的程序,该程序使用第三方 DLL“ABC.DLL”。我在 Windows 7 64 位。
但是,由于一个 DLL,它无法运行。在此 DLL 上运行 Dependency walker 时,我收到以下错误:
错误:“...\ABC.DLL”的并排配置信息包含错误。应用程序无法启动,因为它的并排配置不正确。请查看应用程序事件日志或使用命令行 sxstrace.exe 工具了解更多详细信息 (14001)。
缺少依赖项 MSCVR80.DLL 和 MSVCP80.DLL。
我已经尝试了以下主题中的所有解决方案,但仍然遇到相同的错误。
ABC.DLL 是在 Visual Studio 2005 中构建的第三方库,我无法重建它。
我已经安装了 Visual Studio C++ 2005 Redistributable,并尝试复制从另一台计算机获取的 DLL(因为我的计算机中没有它们),但没有任何效果。
visual-c++ - 如何分发 msvr71.dll (microsoft visual c++ runtime dll)
我有一个需要 msvcr71.dll 的应用程序。在某些机器中缺少 DLL。我不想让用户安装 VC++ 运行时,而是想将 DLL(只有一个文件 msvcr71.dll)与我们的应用程序一起分发。这将被复制到应用程序安装目录。
从许可的角度来看,我这样做是否正确?我找不到任何许可协议。
该页面有以下注释:
对于 Msvcr70.dll 或 Msvcr71.dll,您应该将 CRT DLL 安装到您的应用程序文件目录中。您不应将这些文件安装到 Windows 系统目录中。对于 Msvcr80.dll 和 Msvcr90.dll,您应该将 CRT 安装为 Windows 并行程序集。
msvcrt - Microsoft vs. GNU C/C++ 标准库实现
从实施的角度来看,哪一个更好更干净,可以推荐作为学习指南?在我看来,一个人可以通过浏览那些 C 库(C++ 的东西变得丑陋恕我直言)实现并玩弄它们来真正学到很多东西,因为它们在设计和概念上相当简单。我期待那些浏览过这两种实现的人会给出公正的答案。
对于不知道的人,Microsoft 的 C/C++ 库的大部分实现都可用于调试目的。您可以在 Visual Studio 安装文件夹中找到它们VC\crt\src\
。例如。对于 VS2008:(c:\Program Files\Microsoft Visual Studio 9.0\VC\crt\src
假设您在 中安装了副本c:\Program Files\
)。
windows - 为什么在进程启动期间会创建一个额外的工作线程?
我正在运行一个简单的 Windows 控制台应用程序:- 当控件位于 main 时,我转储了堆栈--
_ 我的主线程堆栈:
__
以上很好,为什么我在启动时看到这个??:
堆:
visual-c++ - 编译 Win32 应用程序而没有特定的依赖项或大小膨胀
我正在尝试使用 Visual C++ 2008 构建一个小型 Win32 应用程序,但我希望它可以在任何现代 Windows 机器上运行,而不必提供额外的库,也不必增加静态链接它们的大小。
我在互联网上阅读了很多关于这个主题的文章,比如这个: http: //kobyk.wordpress.com/2007/07/2...visual-c-2005/
我知道一个好主意是将我的项目动态链接到 msvcrt.dll,它可以在任何现代 Windows 作为系统 dll 中找到,而不是像 msvcr90 这样的新运行时会随着每个新的 Visual Studio 版本而变化。
所以在链接器选项中,我忽略了所有默认库 (/NODEFAULTLIB) 我将 msvcrt.lib 添加到附加依赖项中
但是我在编译时遇到了一堆“未解析的外部符号”错误,比如这些:
我还尝试使用一些替代 C++ 运行时库,旨在减少 Minicrt、WCRT 等体积膨胀,但无论如何我都会收到“未解析的外部符号”错误。
任何帮助是极大的赞赏,
提前致谢
c++ - 未定义 _DEBUG 时检查堆完整性?
我希望创建一个项目的构建,使其与发布构建相同,除了使用默认分配器的调试版本(对 alloc/free 等进行金丝雀检查)。编译器/CRT 是 Visual Studio 2010。
阅读 CRT 的文档,似乎需要定义 _DEBUG 以便不删除对 _CrtCheckMemory()、_malloc_dbg() 等的调用。我不希望启用 _DEBUG 定义,因为这将影响比分配器更多。
有没有办法在没有定义 _DEBUG 的情况下使用 CRT 调试分配器?
python - 在 Windows 机器 OOTB 上使用 cx_Freeze (Python 2.7)
自从我开始使用 Python 以来,我就一直被这个问题所困扰,我想编写一个 Python 脚本,然后将其导出为可以在任何 Windows XP(及更高版本)机器上运行的 EXE。
cx_Freeze 完美地涵盖了所有这些,唯一的问题是它需要在客户端计算机上安装 Visual C++ 运行时,然后生成的 EXE 才能在其上运行......
是否有可能将我漂亮的 *.py 文件转换为可在全新安装的 Windows XP 及更高版本上运行的可分发 EXE?
c++ - 发现问题:Visual Studio CRT 库:FLS_GETVALUE
今天查看Visual Studio 2008和2010的CRT库的源代码,发现mtdll.h文件有bug。问题出在宏 FLS_GETVALUE 上。在 x86 系统上,此宏直接调用 TlsGetValue,而不是调用分配给变量 gpFlsGetValue 的函数。
首先,这是一个问题,因为 FlsAlloc、FlsGetValue、FlsFree 和 FlsSetValue 并非在所有系统(Windows Vista+ 和 Windows Server 2003+)上都可用。这些函数的行为类似于 TlsAlloc、TlsGetValue、TlsFree 和 TlsSetValue,但支持 Fibers(一种用户线程)。因为我们应该更喜欢使用 Fls* 函数而不是 Tls 函数,所以 VS 的 C 运行时库会在加载进程或 dll 时检查 Fls 函数是否可用,并初始化 gpFls* 变量。如果 Fls* 不可用,CRT 将使用等效的 Tls* 函数初始化这些变量。
您不能在代码中直接使用宏 FLS_GETVALUE,因为它在运行时库内部使用。运行时使用此宏来初始化运行时库的每个线程数据。
我的问题是关于这个错误的影响。我知道 Fiber 并没有被广泛使用,但是如果您开发一个在使用 Fiber 的应用程序中使用的 DLL,会产生什么影响?这个错误是否会导致应用程序崩溃或只会产生错误的结果?这个问题是否会导致 SQL Server 等广泛使用的应用程序出现问题?你怎么看?这个错误会带来安全风险吗?IIS 或 ASP.Net 是否使用可能导致崩溃的光纤?
对于好奇的人,这里是 mtdll.h 中问题行的当前来源:
#define FLS_GETVALUE ((PFLS_GETVALUE_FUNCTION)TlsGetValue(__getvalueindex))
这里是宏 FLS_GETVALUE 的固定版本:
#define FLS_GETVALUE (((PFLS_GETVALUE_FUNCTION)DecodePointer(gpFlsGetValue))(__getvalueindex))
现在,我应该找到如何向 Microsoft 提交错误。
dll - 在 DLL (VS2005 SP1) 中使用版本 4053 的 CRT (/MD) 而不是最小的最大 (5592)
我希望你能帮我解决这个问题。
我想使用 CRT (/MD) 的 4053 版本而不是 Visual Studion 2005 SP1 中的最新版本 (5592) 构建一个 dll(静态链接其他非第三方库)。
我想知道使用以下方法是否足以完成此任务。通过在解决方案的所有依赖项目中使用此方法,据我了解,dll 的嵌入式清单已更改为声明请求的 CRT(和 MFC、ATL)版本。这个假设正确吗?
只是确保 dll 的嵌入式清单声明了所需的版本就足够了吗?在构建我的dll(忽略特定库)时,我不应该也使用属于旧(4053)CRT dll(msvcr80.dll)的正确导入库(msvcrt.lib)吗?这个导入库(msvcrt.lib)是如何随着像这样的小版本变化而变化的?
提前致谢!
马克·莫森
msvcrt - 在 Vista (SP2) 64 位上:为什么我的 C/C++ 运行时 (CRT) 程序集缓存对我的应用程序不可见?
嗨,所有 VC++ 和 Windows 专家!;)
首先,我的背景:Vstudio、C & C++、Windows。(如果你愿意,你可以和我一起学习技术)。经过 5 天尝试各种可能性、论坛和修复甚至更改操作系统平台后,我决定在这里发帖(或跳出窗口!)我在 AGONy 试图解决这个问题,因为它是阻止我的实际开发工作!!. :)
Soo.. sceratio 是:出现问题的开发机器:操作系统:带有 SP2 的 Windows Vista 64 位(即使在使用 VMWare 运行的 32 位 XP SP2 虚拟机上发生相同的问题。开发 IDE:带有 SP1 的 Visual Studio 2008已安装。输出二进制类型:.DLL(它的命运是成为一个开发插件。IDE caled RealStudio)
问题/问题:我正在使用 VStudio 2008 开发一个 32 位 C++ DLL。它包含一个相当大的 C++ 库,称为 ASDCP(用于音频/视频编解码器处理)——它是用 PURE C++ 编写的,并且具有完整的内置支持在 Win32、Linux、MacOS 等上构建。
现在 ASDCP 库使用 C++ 标准库(存储在 MSVCP90.dll 和 .lib 文件中)。因此,当我构建自己的插件(DLL)并允许它是调用者应用程序(称为 RealStudio,另一个开发 IDE)时,没有 ASCP 库(因此不需要链接 C++ Std.Libs),它工作正常. 但是当我从 ASDCP 库添加代码,并选择静态链接(/MT)C++ 运行时库,然后加载插件并运行 RealStudio 时,它会因内存泄漏而崩溃——可能是“访问冲突”——可能是由各种 DLL 之间的一些不匹配引起的。
现在,我对这篇文章的问题是,当我在 VStudio 2008 中动态链接 CRT,然后尝试通过 rnnign RealStudio 加载插件时——该死的东西根本无法找到 Microsoft.CRT 的 Side-by-Size ASSEMBLY CACHE .VC90!!我已经处理了所有清单文件,将清单文件嵌入到 DLL 中,检查(大约 10 次!)WinSxs 程序集缓存中的 CRT 版本,反对我的清单文件/依赖项需求。
但不知何故...... RealStudio(RunAs Admiistrator)无法加载我的 CRT 9 DLL(特别是 MSVCP90.dll)。我在 MSDN 和其他论坛上花了大约 15 个小时来查看类似的问题和解决方案,并按照微软论坛版主的建议实施了这些解决方案。但无济于事。
所以..你如何获得一个在 64-Windows(Vista SP2)下运行的 32 位 C++ DLL,以“查看”相关 CRT 依赖项的 Assembl 缓存并加载它??????
帮助!?!?!拜托了。。
提前深深感谢帮助我恢复理智!
迪内什