问题标签 [visual-c++-2015]
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-c++ - LoadLibrary 在 XP 嵌入式上失败,出现 0xC000001D,但在 XP Pro 上按预期运行
我有一些相当旧的进程内 ATL COM 服务器,以前使用 VC++ 2005 构建。
现在这些项目都移植到了VC++ 2015。
由于我需要支持传统的Win XP系统,平台工具集是“VS 2015 - Windows XP”。另外,根据这个问题,/Zc:threadSafeInit-
设置了编译器选项。
所有服务器都是使用 ATL 属性编写的,每个项目中都有这样的内容:
问题。所有这些项目在 WinXP Pro 上运行良好。但是当我尝试在 XP Embedded 机器上注册它们时,我会收到 0xC000001D 错误代码LoadLibrary
。
如何修复/诊断此错误?
PS 如果这是有道理的,XP 嵌入式系统是建立在 AMD Geode 处理器之上的,而 XP Pro 系统是建立在普通 Intel 处理器之上的。
c++ - C4503 警告,但名称似乎没有那么长
我收到一个警告 4503“超出装饰名称长度,名称被截断”的问题。整个大项目中只有一个,而且这个名字似乎也不是特别长,就 Boost 模板而言!
MSVC++ 编译器的每个版本都扩展了限制,所以我希望 VS2015 可以轻松处理 Boost MPL。
那么为什么警告出现在这个(而且只有这个)上,一个相对平凡的模板用法?任何涉及 CRTP 的类的智能指针都会显着延长。
由于我在此站点上阅读了其他答案,因此我犹豫是否要禁用该警告。尤其是它是如此罕见,我想知道它发生了什么。
c++ - Visual Studio C++ 链接未使用的全局变量
我有 mylib.lib:
和 proxylib.lib:
和exe项目:
主项目引用了proxylib.lib 项目,proxylib 项目引用了mylib.lib 项目。在编译并将项目链接到最终的 exe 后,我从 exe 中的 mylib.lib 中获得了未使用的全局变量“arr”,即使函数“foo”不在 exe 中。为什么 ?
谢谢 !
c++ - 使用安全 _vsnprintf_s 获取所需的缓冲区长度
我正在尝试更新一些“遗留”代码以符合 MSVC 的最新安全更新,并且在_vsnprintf
从_vsnprintf_s
.
特别是,我_vsnprintf
使用空缓冲区和计数/长度为零进行调用,获取结果,分配所需大小的缓冲区(return value + 1
),然后_vsnprintf
使用新分配的缓冲区和已知正确的大小再次调用:
此行为记录在 MSDN 上:
如果由 count 指定的缓冲区大小不足以包含由 format 和 argptr 指定的输出,则 vsnprintf 的返回值是在 count 足够大的情况下将写入的字符数。如果返回值大于 count - 1,则输出已被截断。
我正在尝试对 做同样的事情_vsnprintf_s
,但它的文档不包含相同的. 相反,它说
如果存储数据所需的存储空间和终止 null 超过 sizeOfBuffer,则调用无效的参数处理程序,如参数验证中所述,除非 count 为 _TRUNCATE,在这种情况下,写入缓冲区的尽可能多的字符串,并且 - 1返回。
无论如何尝试以下方法:
这导致“长度”为零。如果您传入_TRUNCATE
(-1) 作为计数,则以下断言将失败:
表达式:buffer != nullptr && buffer_count > 0
我认为可以覆盖_set_invalid_parameter_handler
并以某种方式找出长度应该是多少,但是必须有一种更简单的方法吗?
winapi - 在 VS2015 中替换 __wgetmainargs
现在我正在使用__wgetmainargs
为了检索代表用户环境中设置的变量的字符串数组。
使用 VS2013 一切正常,但是,使用 VS2015 我得到error LNK2019: unresolved external symbol __wgetmainargs
错误。
我发现这已被删除,这CommandLineToArgvW
是一个替换,但我不需要命令行参数,我需要环境数组(由于某种原因我不能使用_wenviron
,我只是在那里得到垃圾)。
我必须将哪个库添加到链接器或我可以使用哪个替代 API?
floating-point - 如何舍入浮点数?C++/CLI - VS2015
假设有两个浮点数:a, b。我需要将 a 的值分配给b。然后b将通过一个函数转换为文本字符串,我无法更改。转换是通过取浮点数的前 3 位小数而不四舍五入来完成的,其他点被忽略。这会导致准确性的损失。
问题:我怎样才能改变a的值,那么在转换后b会像四舍五入一样吗?
希望我设法解释了问题,但如果没有,请告诉我。
c++ - VS2015从windows程序中删除linux上的文件
我们在 Windows 上有一个服务器,但它有一个网络驱动器,它实际上是在一个 linux 服务器上。该程序必须删除同一位置的同名文件(信号),当这些文件在本地驱动器上时它可以正常工作,但是当在网络驱动器上运行时,它有时不会删除该文件,更糟糕的是,这些函数将返回一切正常(意味着文件被删除)。remove
我用, _unlink
,试过了,DeleteFileA
问题仍然存在,有时完全随机它不会被删除,它会保持这样的状态。
代码非常简单:
即使没有删除文件,这也将始终返回 true,例如,如果它没有权限,它应该会失败(并且每次都失败,而不是随机失败),有人可以给我一个想法吗?我用完了选项:(
编辑: 感谢@ExcessPhase,看来moveFile实际上检测到了错误,因此在删除之前重命名可以检测到问题“ERROR_FILE_NOT_FOUND”。
其他事情:这个随机问题只有在从 linux 服务器创建文件时才会发生。如果我从 Windows 创建它们,它们将始终被删除。更重要的是:如果我有一个程序无法删除的文件,并且我从 Windows 旁边创建了另一个文件,程序将检测并删除它之前无法删除的文件。
Edit2:更接近答案:文件名test
和TEST
在 linux 中是不同的,而在 Windows 中是相同的。当大小写不匹配时,问题似乎随机出现。但我不确定,因为它是如此随机。
c - Visual C++ 2015 /GL(整个程序优化)和 /OPT:REF(优化引用)防止调用静态初始化程序
简介: C++ 中的全局静态对象在启动前被初始化main()
。考虑:
输出是glob = 1
, 因为calc_it()
和分配是在main()
开始之前执行的。代码的顺序与它无关。
现在想象一下,您有多个带有类似代码的源文件,并进一步想象它们以某种方式相互依赖(无论出于何种原因,您都想要某种执行顺序。我们不要讨论这是好的还是坏的设计。)
执行的顺序不是由标准定义的,但是在 Visual C++ 中有一些方法可以对它们施加一定的顺序。对于全局静态对象,可以#pragma init_seg(SECTIONNAME)
在对象定义的前面使用来指定某个节名。
但最后这只会导致编译器将(__cdecl *)(void)
指向函数的指针放在某些链接器部分(它们都以 开头.CRT$XC
)。在链接器确定内存布局之前,节名称按字典顺序排列。默认部分名称是.CRT$XCU
. 然后,C/C++ 初始化代码将这些段的内容.CRT$XCA
视为.CRT$XCZ
函数的指针,并一一调用。
我们也可以使用#pragma data_seg(SECTIONNAME)
指令手动执行此操作。所以这:
将输出:
那有多好?:)
问题描述:/GL
AFAIK,自 Visual C++ 2015 起,如果您将选项(整个程序优化)与/OPT:REF
链接器选项(删除未使用的函数和数据)一起
使用,这将不再有效。原因可能是从链接器的角度来看,_init_ptr
从未使用过。在较旧的 Visual Studio 版本中,这仍然有效,因为它们从不删除未使用的数据,只删除使用的代码。
问题:如何仅针对单个符号避免这种情况?
visual-studio - 如何从 Visual Studio 污染中提取源代码文件?
在源代码所在的目录中,还有Visual Studio相关的文件,如*.user、*.vcxproj。和文件Debug
夹Release
。
我想更改项目目录布局,使其看起来像这样:
例如,该项目名为 ProjectX。
在 ProjectX 主文件夹中,只有两个子文件夹:
ProjectX/源
ProjectX/构建
在 ProjectX/Source 中将有所有源代码文件,但没有别的。
在 ProjectX/Build 中会有所有与 Visual Studio 相关的文件。
我该怎么做?
c# - 在 Windows 7 升级到 10 后检查 VC2015 可再发行组件(无更新 vs update1 vs update 2)
我有一些软件可以在加载和调用需要它的 DLL 之前检查是否安装了 Visual C++ 2015 x86 可再发行组件。检查是通过对 的互操作调用完成的MsiQueryProductState
,使用以下声明
电话是
它曾经可以工作,现在仍然可以在其他安装了 Windows 10 并安装了原始的、未更新的可再发行组件的机器上工作。
我将 VS2015 与 Update 2 一起用于 C# Windows 桌面开发,其中包括可再发行更新 2。
几周前,我将Windows 7升级到Windows 10,昨天发现支票从returnsINSTALLSTATE_DEFAULT
变成了returns INSTALLSTATE_UNKNOWN
。我不确定这是否与问题有关,因为我是在升级后才发现的。
谷歌搜索并一无所获后,我搜索了注册表和可再发行安装日志文件,我找到了以下键
但如果我做对了,我一点也不知道——前两个返回INSTALLSTATE_UNKNOWN
,后两个返回INSTALLSTATE_DEFAULT
。哪个有效,但我不知道它是否正确。我认为所有版本和更新都将使用相同的密钥。
所以,我想问的问题是:我应该查询哪些键才能知道是否安装了 Visual C++ 2015 x86 Redistributables 的兼容版本,是没有更新、更新 1 还是更新 2?