问题标签 [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.
windows - _USING_V110_SDK71_ 不是从 VC++ 2015、v140_xp、Release 中的默认值继承的?
总结:编译Release版本的时候报Undeclared identifier SetDefaultDllDirectories
from atlcore.h
,但是编译Debug的时候就OK了。进一步的调查表明,_USING_V110_SDK71_
扮演的角色。它应该继承自项目默认值(见下图),但不适用于组合:Release MinDependency 和 v140_xp。
详细信息:我正在将 C++ 本机 ATL 应用程序从 Visual C++ 2005 迁移到 Visual C++ 2015。目标是尽可能长时间地保持 Windows XP 运行版本。因此,为项目设置了 v140_xp 平台工具集。它适用于调试版本。但是,它会导致 Release MinDepency 版本的编译错误。使用 v140(不带 _xp)时,它编译得很好。
这是需要迁移的应用程序的一个分支。我已经成功将其他分支(更早的)迁移到了VC++ 2008、2010、2012和2013。(或者我忘了做某事,或者现在情况不同了。)
我已经看到其他地方也提到过这个错误;但是,原因可能不同。完整的错误行是:
有问题的行用于以下情况
因此,显然没有定义该符号。我正在使用 Visual Studio 2015 Professional,版本 14.0.23107.0 D14REL 和 Windows 8.1。
检查项目设置时,_USING_V110_SDK71_
应定义符号——从项目默认值继承。
更新:输出窗口中的错误消息和周围的行:
你能解释一下吗?谢谢
windows - C ++ 11 std :: cout <<“UTF-8中的字符串文字”到Windows cmd控制台?(视觉工作室 2015)
摘要:我应该怎么做才能将源代码中定义的以 UTF-8 编码 (Windows CP 65001) 存储的字符串文字正确打印到使用流的cmd
控制台?std::cout
动机:我想修改优秀的Catch 单元测试框架(作为一个实验),以便它显示我的带有重音字符的文本。修改应该简单、可靠,并且对其他语言和工作环境也应该有用,以便作者可以接受它作为增强。或者,如果您知道 Catch 并且如果有其他解决方案,您可以发布吗?
详情:我们先从捷克版的“快棕狐……”开始吧
它打印以下内容(字体设置为 Lucida Console):
默认编码为 852 ,cmd
默认 windows 编码为 1250,源代码使用 65001 编码(带有 BOM 的 UTF-8)保存。SetConsoleOutputCP(1250);
更改编码(以编程方式)的方式与更改cmd
编码相同chcp 1250
。
观察:设置1250编码时,UTF-8字符串文字打印正确。相信是可以解释的,但是真的很奇怪。有什么体面的、人性化的、通用的方法来解决这个问题吗?
更新:在我的"narrow string literal"
情况下使用 Windows-1250 编码存储(中欧的本地 Windows 编码)。它似乎与源代码的编码无关。编译器将其保存在windows 本机编码中。因此,切换cmd
到该编码可以提供所需的输出。这很丑陋,但是我怎样才能以编程方式获取本机 Windows 编码(将其传递给SetConsoleOutputCP(cpX)
)?我需要的是一个对发生编译的机器有效的常量。它不应该是运行可执行文件的机器的本机编码。
也引入了 C++11 u8"the UTF-8 string literal"
,但似乎不适合SetConsoleOutputCP(CP_UTF8);
c++ - 在可变参数模板中使用对
好的,我正在尝试使用可变参数模板在 n 维中实现范围树。我有基本的设置工作,但我希望能够有选择地在模板列表中传递一个比较函数对象,以按 std::less 以外的东西对树进行排序。
我的第一个想法是,我可以使用包含一对作为第一个元素的版本来重载模板列表,其中包含类型和比较函数的对。但我看不到要编译模板声明行。Visual C++ (2015) 从 C2079 开始:“std::pair::first uses undefined class 'T'”。
无论如何,上代码。这是一个小片段来显示我正在尝试做的事情:
这一切正常。但是当我添加另一个版本的 rangetree 时,将一对作为第一个模板成员,我遇到了问题:
这是我似乎可以以编译器满意的方式格式化的部分。这个想法是可选地将模板成员与比较函数配对,如果应该使用更少的东西。
c++ - 为什么 static const char * 模板结构成员未初始化
我有一些 C++11 模板代码,我正在尝试移植到 Visual C++ Compiler 2015。原始代码工作得很好,但是我需要重写它以解决 constexpr 的问题。
这打印:
但是,当我重写时,一些静态变量没有初始化。即使它编译得很好。
这打印:
为什么会这样?
我该如何修复/解决它?
这可以在 Clang 和 Visual-C++ 中重现,但是 GCCFooBar::value = STRING
也会在第二个示例中打印。
更新:工作解决方案
正如@serge-ballesta 所建议的那样。我更喜欢这个解决方案,因为它与原始代码非常相似。当 constexpr 成员添加到 VS 时,可以轻松应用和轻松删除。
windows - How to set size and position of a MDI Client?
It seems like both size (x
, y
) and position (nWidth
, nHeight
) arguments are ignored when using CreateWindow
. For example:
It's always aligned to the top-left corner and takes the parent's size, as shown below.
(We could see the difference since the window background is COLOR_WINDOW
).
c++ - std::array 作为另一个标准容器的元素类型?
似乎没有任何规则反对它,我得到的错误
是C2036 'std::array<int,0x08> *': unknown size
这是没有意义的。内部的代码<vector>
正在推进内部end
指针,该指针也用于其他地方(扩展的计算大小也是如此)。a 的大小struct{int x[8];}
当然是“已知的”。
这里发生了什么?
嗯,因为它不仅仅是一个简单的错字或类似的错误,而且当其他人尝试它时似乎工作正常(并且其他人编写的示例对我有用!)我削减了源文件,直到除了有问题的语句之外什么都没有留下,它仍然失败。这是整个文件。预编译头文件已关闭。
我正在使用 x64 构建,发布构建。
弄清楚了:
这不是缺少#include for vector
,而是 for array
!它显然是在其他标题中前向声明的,但不完整。
c++ - 如何在存在 VC++ 2015 整个程序优化的情况下正确地从 dll 公开接口
最近我们在我们的遗留代码中遇到了一个有趣的效果,即目前从 VS2010 移植到 VS2015。不幸的是,我无法创建一个小例子来展示这种效果,但我会尽可能准确地描述它。
我们有 2 个 dll(我将它们称为 dll A 和 dll B)。dll A 的项目定义了接口 IFoo 和派生接口 IFxFoo
在 dll B 中,使用了两个接口。
processFoo() 将被不同的 IFoo 实现调用。一些来自 dll A,一些来自 dll B。
现在发生的情况如下: - 如果我们在编译 dll B 时打开整个程序优化,函数 fill() 中对虚函数 GetSlot() 的调用会被 Visual C++ 反虚拟化。这导致我们的程序崩溃。如果我们要么
- 整个程序优化
- 填充优化转向
- 或者用 __declspec(dllimport) / __declspec(dllexport) 标记我们的接口
我现在的问题是:
- 我们的假设是否正确,因为优化器在 dll B 中只看到了 IFxFoo 的一个实现,并假设这是唯一的一个,因为 IFxFoo 没有被标记为来自不同的 dll?
- 在头文件中创建“接口”的最佳方法是什么?我们曾经像上面那样做,但这似乎会导致一些问题。
- 其他编译器(gcc / clang)是否表现出类似的行为?
感谢您的帮助托比亚斯
c++ - Windows 上带有 libssh2 和 libopenssl 的 libgit2
我以前尝试过,但在完整构建中收效甚微,但即使现在也失败了,我显然在 Windows 上遗漏了一些东西(是的,它可能是 Windows:P)
有人可以带我过去吗
- 找到正确的 OpenSSL 以使用 libssh2 进行编译
- 实际上cmake /将libssh2编译到libgit2中,因为它一直说找不到libssh2,我正在努力再次构建它。
我正在使用 CMake gui For windows,试图构建一个 VC2015 项目
我在构建 libgit2 时遇到的错误是
即使我已经把它放在我认为它会看起来的每一个可能的地方,我也尝试过设置CMAKE_PREFIX_PATH
?
如果有人在 Windows 上成功完成了它,我将不胜感激一两个关于我做错了什么或应该做的事情
谢谢罗伯特