问题标签 [visual-c++-2017]

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 回答
467 浏览

visual-studio - 在 Visual Studio 中保存和调试图像

我正在Visual Studio 2017中用C++编写一个复杂的算法,我想知道调试器停止在中断点后是否可以保存完整状态的图像,然后随意返回为如果我从一开始就运行代码。

原因是到那时进行初始化需要很多时间。

0 投票
0 回答
201 浏览

lambda - 为什么捕获 unique_ptr 的 lambda 不能在容器中使用

为什么无法将捕获 unique_ptr 的 lamda 推送到 的容器中std::function?这是正确的标准行为还是 VC 问题?有没有办法解决这个问题?

VC 编译器错误(Visual Studio v15.8.9):

0 投票
3 回答
973 浏览

c++ - 在 C++ 2017 中将 const 转换为非 const 指针并对其进行修改时,编译器将这两个值存储在哪里?

在 Visual C++ 2017 中,在尝试违反规则时会发生什么时,我发现如果我将 const int 强制转换为 int *,然后将值重新分配给 int *,调试器将更改 const 的值,但运行时执行不会。

无论我是在调试模式下运行它还是作为已发布的可执行文件运行,都会发生这种情况。我知道它是未定义的,但我正在寻找有关这些值所在位置的见解,因为它们似乎是相同的位置。

这两个值存储在哪里?这就像有一个桶同时装满两种不同的液体。

我知道这是未定义的行为,但我想知道是否有人可以在内部阐明正在发生的事情。

0 投票
1 回答
247 浏览

c# - 如何解决运行时异常在“Esri.ArcGISRuntime.UI.Controls.MapView”类型上调用构造函数

我正在使用 Visual Studio 2015 中的 ArcGISRuntime SDK(版本 100.4.0)开发 GIS Windows 窗体应用程序。当我在部署机器(没有 Visual Studio 环境的 Windows 10 机器)中部署应用程序 exe 时,应用程序工作正常。之后我转移到 Visual Studio 2017。该应用程序在开发人员机器中正常运行。但是,当我在部署机器中部署 exe(没有 VS2017 设置)时,它会抛出以下异常:

'调用与指定绑定约束匹配的'Esri.ArcGISRuntime.UI.Controls.MapView'类型的构造函数引发异常。

之后,我浏览了以下链接:

https://developers.arcgis.com/net/latest/wpf/guide/system-requirements.htm#ESRI_SECTION1_F2655B7F48F7464DB86CC7756706296D

它显示以下要求对于 ArcGIS 相关应用程序部署是强制性的:

  1. 视窗 10

  2. Microsoft .NET Framework 4.6.1 或更高版本

  3. 适用于 Visual Studio 2017 的 Microsoft Visual C++ Redistributable

我的部署机器满足前两个要求。所以我在我的部署机器上安装了 Microsoft Visual C++ Redistributable for Visual Studio 2017。但是,问题仍然没有解决。

请帮我解决这个问题。

0 投票
0 回答
236 浏览

c++ - 如何禁用宏中的警告

我正在查看一些有关无法访问代码的自定义代码。简而言之,我有一个宏将某些代码标记为逻辑上不可访问。这可以用作:

同样,我试图在编译器已经知道代码无法访问的位置重用这个宏。

也就是说,在某些情况下,MSVC 仍然会在无法访问的宏中对自定义处理给出无法访问的代码警告。简化版本如下所示:

在编译器资源管理器中复制

根据我从[微软文档](https://docs.microsoft.com/en-us/cpp/preprocessor/pragma-directives-and-the-pragma-keyword?view=vs-2019)中了解到的信息,我应该能够__pragma在调用我的宏时使用带有此警告的 push/pop 来禁用此警告。(它甚至有一个这样做的例子)

这里应该改变什么来抑制 MSVC 中的警告?

0 投票
1 回答
355 浏览

unhandled-exception - Visual Studio 2017 中未处理的异常:内存位置 0x0023F6A0 处的 unsigned long

我正在尝试使用 VC++ 在 Visual Studio 2017 中确定运行应用程序的用户帐户是否属于 Admin 组。但是,当我在 IDE 中运行该程序时,它会在给定函数的末尾停止,并出现异常对话框,该对话框显示“Target.exe 中 0x7697B022 处的未处理异常:Microsoft C++ 异常:内存位置 0x00CFF638 处的无符号长。发生”。但是我在 IDE 中单击“继续”,执行继续并完成程序执行。

我想知道我在做什么错误,应该做些什么来消除这个异常。

0 投票
2 回答
456 浏览

c++ - 为什么 char{} 和 char() 用作 char* 参数的临时变量?

在 Visual C++ 2017(带有/std:c++14或带有/std:c++17)中,以下代码有效:

我不明白为什么它有效。

显然,以下内容也将起作用(如预期的那样):

编译器如何将类型推断(或转换)charchar*、 何时char{}char()用作参数?

现在,如果我同时拥有charchar*重载,它的工作原理不会出现任何关于歧义的错误/警告:

为什么编译器可以使用char{}for TakePtr(char*)为什么在选择更好的版本时不给出警告/错误?这种行为势必会破坏现有代码。

当然,编译器不满意:

0 投票
1 回答
85 浏览

windows-10 - #include-ing DirectXMath 和 DirectXTex 时的重新定义

使用VS2018Pro、Windows10、

在跨项目文件拉入 DirectXTex.h、DirectXMath.h 和 DirectXCollision.h 时,我遇到了许多重新定义编译错误。

DirectXMath 和 DirectXCollision 是 Win10SDK 标头的一部分,我从 github 存储库中提取 DirectXTex 并将其放在我的项目文件夹的本地。

在我的代码库中,我需要在各种文件中包含 DirectXTex.h、DirectXMath.h 和 DirectXCollision.h 标头,但是我在 DirectX 命名空间中遇到了许多重新定义错误和重复项。我知道我可能必须先包含一个(我已经尝试了许多变体,例如 DirectXTex 引入了 DirectXMath),但我无法编译。

有没有人知道在项目文件中提取这些包含的正确顺序?

0 投票
0 回答
419 浏览

c++ - Visual Studio 专业版 2017 链接器

我最近在 Visual Studio 2017 下将我的项目从 C++11 转换为 C++17,并立即开始遇到链接器问题,如下所示:

LINK : 32 位链接器 (C:\Program Files (x86)\Microsoft VisualStudio\2017\Professional\VC\Tools\MSVC\14.16.27023\bin\HostX86\x86\link.exe) 无法执行内存映射文件`C:\Git\Raptor\temp\MsBuild\Output\Debug_v141\Rev2Aux_Debug.lib' 上的 I/O 并将重新启动与 64 位链接器的链接以获得更好的吞吐量 7>LINK:未能找到 64 位%PATH% 上的链接器,继续当前链接;请考虑切换到 64 位链接器

本质上,它是什么,构建器尝试对较大的 Lib 使用 64 位链接器,但在其中找不到它,%PATH%因此它求助于 32 位链接器,并在遇到此问题的每个场合都这样做, 经常这样。这大大减慢了我的构建时间。

现在,关于我的 VisualStudio 环境和我的 Windows 版本的一切都是 64 位的,所以我不知道还能做什么。

有什么解决办法?

自从转换为 C++17 以来,我注意到的另一个问题是 VisualStudio 编辑器和调试器的响应速度有多慢。例如,在调试会话期间在窗口之间切换需要很长时间。

0 投票
1 回答
214 浏览

c++ - 正确使用 RDRAND(片上生成器)作为 std::random_device 与 Visual C++ 的随机库

我希望能够在可用时使用硬件随机数生成器,并且无论英特尔或 AMD 运行代码如何,都可以使用 C++ 随机库:

根据这篇文章entropy()应该在没有 RDRAND 的 cpu 上返回 0,例如 i7-2670qm ivy 桥(我在其上测试过 - RDRAND 第一次出现在其继任者 Sandy Bridge 中),但在 Visual Studio 中始终为 32如此处所述。有人建议缺少随机设备可能会导致operator()抛出异常,但这也不会发生。

例如,可以使用内在函数int _rdrand32_step (unsigned int* val),但只能从均匀分布中提取,我需要能够利用 C++ 随机库中可用的分布。

此外,代码应该使用 AMD cpu 上的硬件生成器。

random在 Visual Studio(2017、2019)中将硬件随机数生成器(RDRAND)与 C++ 库一起使用的正确方法是什么?