_com_error DirectX Create* 方法上的例外

_com_error exception on DirectX Create* methods

本文关键字:方法 com error DirectX Create      更新时间:2023-10-16

我最近一直在尝试进入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 的字节。