在 CLI 中抛出 std::exception 会引发访问冲突
Throwing std::exception in CLI throws Access Violation
由于C++代码中的一些C#依赖项,我被迫使用CLI。在这个依赖出现之前,我写了一个异常,它继承自 std::exception。每当我现在抛出此异常时,我的程序都会崩溃,并显示来自 ntd.dll 的访问冲突异常。
所以我把包含异常的头文件放在一个新的 CLI 项目中,并尝试编译它。这给了我一个错误,即"例外"不是 std 的成员。包含<exception>
后,此错误消失了(当然(,但我想知道,为什么以前没有必要这样做。无论如何,这是我在基本示例中的代码:
异常标头:
#pragma once
#include <exception>
//Device is offline
struct E_DvcOffline : public std::exception
{
const char * what() const throw ()
{
return "The Device is offline";
}
};
主要功能:
#include <MyExceptions.hpp>
#include <iostream>
using namespace System;
int main(array<String^>^ args) {
try {
throw E_DvcOffline();
}
catch (E_DvcOffline) {
std::cout << "Caught it" << std::endl;
std::cin.get();
}
}
当代码抛出我的自定义异常时,我收到的异常:
还不能嵌入图片...
提前感谢,加尔文
编辑
throw new E_DvcOffline();
改为throw E_DvcOffline();
我能够解决问题。
#pragma once
**#pragma managed(push, off)**
#include <exception>
//Device is offline
struct E_DvcOffline : public std::exception
{
const char * what() const throw ()
{
return "The Device is offline";
}
};
**#pragma managed(pop)**
变化是螺栓。我没有搜索它,但我认为,这告诉编译器将此代码视为非托管代码,因此调用本机异常处理程序。
警告:当您在调试模式下逐步完成代码时,Visual Studio 最终会产生与以前相同的错误。否则一切正常。
相关文章:
- 写入位置0x0000000C时发生访问冲突
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- 链表中写入访问冲突的未知原因
- C++中的openCV Mat访问冲突
- C++尝试深度复制唯一指针时出现内存访问冲突
- C++ 中动态二维数组的访问冲突
- 从嵌套循环中的 std::list 中删除将返回访问冲突
- 写入访问冲突异常
- 在类 12.exe 中0x7B37FF80 (ucrtbased.dll) 引发异常: 0xC0000005:访问冲突读
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- 读取访问冲突.这0xCDCDCDCD
- 0xC0000005:访问冲突读取位置 0x00000000. 重载 == 运算符的问题
- 插入数组时违反写访问冲突
- 使用 ReadProcessMemory 获取字符串值的访问冲突
- 尝试通过共享指针使用变量时读取访问冲突
- 堆栈上的 C++ 访问冲突写入异常
- 引发异常:写访问冲突. temp 为 nullptr
- 将静态字符数组中的字符分配给动态分配的字符数组 - 访问冲突
- 在C++中删除双向链表的头节点后出现访问冲突异常
- 在 CLI 中抛出 std::exception 会引发访问冲突