DirectX Create *方法的_com_error异常

时间:2016-03-07 08:05:32

标签: c++ directx directx-11

我最近一直试图进入DirectX编程(使用C ++ / Win32),但我遇到了一些问题。

一位朋友编写了一个非常简单的随机地形生成器,可以使用Perlin Noise,所以我试图抓住他的代码并为它制作一个DirectX 11渲染器,但是我的程序抛出了一个" Microsoft C ++ Exception",当我运行它时_com_error。

更糟糕的是,程序根据构建类型在不同的代码行中断...

在Debug上,程序会破坏这段代码:

// 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三角教程中的修改版本时,应用程序运行正常。

1 个答案:

答案 0 :(得分:0)

cso文件不是文本,它是二进制文件。 std::string不起作用,文件将包含0的字节。

相关问题