_com_error DirectX Create* 方法上的例外
_com_error exception on DirectX Create* methods
我最近一直在尝试进入DirectX编程(使用C++/Win32),我遇到了一些问题。
一个朋友编写了一个非常简单的随机地形生成器,可以与Perlin Noise配合使用,所以我试图获取他的代码并为它制作一个DirectX 11渲染器,但是我的程序在运行时抛出了一个"Microsoft C++异常",_com_error。
更糟糕的是,该程序根据构建类型在不同的代码行中断......
在调试时,程序会中断以下代码块:
// Load the pixel shader
std::ifstream pixelFile("pixel.cso");
if (!pixelFile)
return false;
std::string pixelContents((std::istreambuf_iterator<char>(pixelFile)),
std::istreambuf_iterator<char>());
pixelFile.close();
if (FAILED(mpDevice->CreatePixelShader(pixelContents.c_str(),
pixelContents.size(),
NULL,
&mpPixelShader)))
return false;
在发布时:
// Create and set the input layout
if (FAILED(mpDevice->CreateInputLayout(layoutDescription,
layoutDescriptionSize,
vertexContents.c_str(),
vertexContents.length(),
&mpVertexLayout)))
return false;
mpPixelShader 是 ID3D11PixelShader* 类型的成员,mpVertexLayout 是 ID3D11InputLayout* 类型的成员。
当然,当我看到错误不同时,我想的第一件事就是检查内存损坏,果然我在运行 ApplicationVerifier 并设置_crtDbgFlag后在我朋友的代码中找到了一个,但现在它已修复,我仍然有这个错误......
当呈现初始化函数填充了 MSDN Win32 DirectX 三角形教程中的修改版本时,应用程序运行良好。
cso 文件不是文本,它是一个二进制文件。std::string
将不起作用,该文件将包含 0 的字节。
相关文章:
- 获取从 C# 调用的 COM 方法的错误消息
- 将 COM 事件从 C# 触发到C++的正确方法是什么?
- com 释放方法不降至0
- C com 方法参数扣除
- 为什么我的COM智能指针从方法返回时会被删除
- 当从一个应用程序调用时,在DLL方法中创建COM接口指针是有效的,但当从另一个应用软件调用时则无效
- 如何在 JavaScript 代码中调用 COM 方法 (c++)
- 在 .NET 中调用 COM 枚举器的正确方法是什么?
- 删除/编辑 ATL COM DLL 属性/方法
- 当输出参数是类时,如何在C++中调用COM方法
- 可视化 如何删除 ATL COM C++中的方法
- 是否有手动组织COM封送处理的方法
- 使用本机/C++代码在VS2010中创建简单COM对象的最简单方法是什么
- 如何在 COM 中对方法执行返回类型
- COM属性方法和常规接口方法之间的区别是什么
- 初始化COM C++服务多线程的正确方法
- #导入COM DLL生成错误的方法签名
- COM / DCOM:服务器存根不会为现有接口中的新方法分配内存
- COM 方法仅在使用暂停间隔调用时返回正确的值
- COM:始终需要方法参数属性