问题标签 [visual-c++-2008]
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.
c++ - 从 msvc2008 上的失败 vsnprintf 中恢复 Graceflylly
我正在寻找一种方法来使用缓冲区的某些变体,vsnprintf()
该缓冲区可能比输入缓冲区长,而不会向用户触发错误。
到目前为止,我发现它vsnprintf()
及其变体在缓冲区太小时会静默截断字符串,但它们不会返回字符串的实际长度,因此我无法使用更长的缓冲区再次尝试。他们返回-1。
另一方面,vsnprintf_s()
变体在遇到此错误时,调用
反过来最终调用_CrtDbgReportW()
,可能仅在调试中。他们甚至在调用用户提供的“无效参数处理程序”之前就这样做了
我想要的是能够通过获取我需要分配的实际大小并再次调用该函数来在没有用户交互的情况下恢复。那可能吗?
assembly - VC++ 2K8 中 SSE 编码的内在函数与内联 ASM
我以前为 SSE 做过一些内联 ASM 编码,即使对于不了解 ASM 的人来说也不是太难。但我注意到 MS 还提供了包含许多此类特殊指令的内在函数。
是否存在特定的性能差异,或者有任何其他强有力的理由为什么应该在另一个之上使用一个?
重复标题,这是专门介绍 VC++ 2008 为非托管、本机 C++ 公开的内在函数。
visual-studio-2008 - VS 2008 恼人的复制构造函数链接依赖
我在 Visual Studio 2008 C++ 编译器中遇到了以下烦人且看似不正确的行为:
假设我有一个类库 - Car.lib - 它使用“Car”类,头文件名为“Car.h”:
我实际上想要做的是使用 Car 标头(用于其他一些功能),但不必与 Car.lib 本身链接(实际的类不称为“Car”,但我正在清理这个示例)。
如果我在用于构建托管 C++ .dll 的 .cpp 文件中#include "Car.h",但从不引用 Car,则一切都可以编译和链接。这是因为我从不实例化 Car 对象。
但是,以下内容:
给我留下链接错误:
请注意,我已经在匿名命名空间中声明了整个内容,因此在任何情况下都无法从 .DLL 中导出 Car 函数。
我可以肯定地保证 Car 不会在其他任何地方被引用,因为我只是创建了这个类并从 scatch 中输入了定义。“真正的”类是一个不同的名称。
离线声明复制构造函数没有区别。即以下也无法链接:
这与复制构造函数注释特别有关,因为例如,以下内容确实链接:
我不是 C++ 标准专家,但这对我来说似乎不正确。当然,编译器仍然不必生成任何调用 Car 复制构造函数的代码。
谁能确认这种行为是否正确?自从我使用 C++ 以来已经有一段时间了——但我不认为这曾经是 Visual Studio 6.0 的问题。
这可能是因为我正在构建一个托管 C++ .dll。(后来:是的,这正是问题所在。 /clr 选项似乎引入了这种依赖关系)。
这是用于构建项目的命令行:
任何人都可以提出一种解决方法,允许从复制构造函数中“重用”Accelerate 方法并且仍然将复制构造函数声明为内联?
c - 如何使 VC++ 的调试器因异常而中断?
我正在尝试调试用 C 编写的 DLL 中的问题,该问题不断导致访问冲突。我使用的是 Visual C++ 2008,但代码是纯 C。
我习惯了 Delphi,如果在调试器下运行时发生异常,程序会立即中断到调试器,它会给你一个检查程序状态的机会。但是,在 Visual C++ 中,我得到的只是“输出”选项卡中的一条消息:
First-chance exception at blah blah blah: Access violation reading location 0x04410000.
没有休息,什么都没有。它只是去展开堆栈,直到它回到我的 Delphi EXE 中,它会识别出问题并在那里提醒我,但到那时我已经丢失了几层调用堆栈,我不知道发生了什么。
我尝试过其他调试技术,但无论它在做什么都发生在 C 宏内的嵌套循环深处,该宏被调用超过 500 次,这超出了我的技能(或我的耐心)来追踪。
我认为必须有某种方法来获得“第一次机会”异常,才能真正给我一个“机会”来处理它。可能有一些我不知道的“在第一次机会异常时立即中断”配置设置,但它似乎并不是那么容易被发现。
有谁知道它在哪里以及如何启用它?
c++ - std::make_shared 作为默认参数无法编译
在 Visual C++(2008 和 2010)中,以下代码无法编译并出现以下错误:
错误 C2039:“make_shared”:不是“全局命名空间”的成员
错误 C3861:“make_shared”:找不到标识符
它抱怨 P::Foo() 而不是 ::Foo() 的定义。
有谁知道为什么 Foo() 使用 std::make_shared 而不是 P::Foo() 的默认参数是有效的?
visual-c++ - Visual C++ 2008 不能识别 Windows 声明的类型
我有一个程序似乎无法识别最新 U3D 软件中声明的类型。有一条线
得到错误:
错误 1 错误 C2061:语法错误:标识符 'LPMONITORINFOEX' c:\Projects\U3D\Source\RTL\Platform\Common\Win32\IFXOSRender.cpp 28
和一条线
得到
错误 5 错误 C2065: 'miMon' : 未声明的标识符 c:\Projects\U3D\Source\RTL\Platform\Common\Win32\IFXOSRender.cpp 49 错误 3 错误 C2065: 'MONITORINFOEX' : 未声明的标识符 c:\Projects\U3D\源\RTL\Platform\Common\Win32\IFXOSRender.cpp 49
程序的第一个非注释语句是#include <windows.h>
,其中包括winuser.h
,它定义了这些标识符。在 Visual Studio 中,我可以右键单击它们并转到定义(typedef)并从 typedef 转到结构。 WINAPI
中定义WinDef.h
,所以这似乎工作。没有重新定义LPMONITORINFOEX
或MONITORINFOEX
在任何其他文件中。
那么,这怎么可能发生,我能做些什么呢?
visual-c++ - 无法在 VC++ 2008 中添加库:我的系统不同
希望有人能告诉我这里发生了什么。我正在尝试链接到 gdiplus.lib,并尝试转到“属性 - 链接器 - 输入 - 附加依赖项”来添加库,但我没有该部分。我正在使用 Visual C++ 2008。这是我所看到的:
- 共同属性
- 框架和参考
- 配置属性
- 一般的
- 调试
- C/C++
- 图书管理员
- 资源
- XML 文档生成器
- 浏览信息
- 构建事件
- 自定义构建步骤
我检查了每个子类别,没有“链接器”部分或“输入”部分。再一次,这是没有任何自定义或奇怪设置的 Visual C++ 2008。如果有人感兴趣,我在http://drp.ly/13ma9l有一个截图。
为什么我的属性面板与其他人的完全不同?我想典型的微软废话......
c++ - 如何在 CRT 中模拟文件读取错误
使用 VS2008,我们想模拟一个大小为 X 的文件,但在 XY 字节处读取失败,因此我们得到错误指示。
任何人都知道如何在 Windows 上执行此操作?看起来有适用于 linux 的解决方案,但我真的想不出在 Windows 上执行此操作的方法。我们有多个开发人员、多台机器和 cppunit 测试框架,所以我想要一个纯软件设计。
我正在尝试模拟实际的 CRT 失败,因此我可以测试处理失败的代码。
visual-c++-2008 - 我的代码在调试模式下工作,但不在发布模式下
我在 C++ 中的 Visual Studio 2008 中有一个代码,它仅通过 fopen 和 fclose 处理文件。一切都在调试模式下完美运行。我已经测试了几个数据集。但它在发布模式下不起作用。它一直在崩溃。我已经关闭了所有的优化,也没有任何依赖(在链接器中),而且我已经设置了这些:
优化:禁用(/Od)保留未引用的数据。不要删除 Windows98 的冗余优化:否
我仍然想知道在这种情况下它不应该如何工作。我还应该关闭什么让它像调试模式一样工作?
我认为如果它在发布模式下工作而不是在调试模式下工作,可能是编码错误,但另一种方式看起来很奇怪。不是吗?
我很感激任何帮助。——尼玛
visual-c++ - std::vector 的奇怪行为
我有这样的课:
这是我的代码的简化版本。问题是在调试模式下它工作得很好。但在发布模式下,它会在“push_back”行崩溃。(所有优化标志都关闭)我在发布模式下调试它,问题出在A的构造函数中。向量的大小对于虚拟值来说非常大,当我清除它时,它不会改变......
你知道为什么吗?
谢谢,