Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/126.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ _DirectX Create*方法上的com_错误异常_C++_Directx_Directx 11 - Fatal编程技术网

C++ _DirectX Create*方法上的com_错误异常

C++ _DirectX Create*方法上的com_错误异常,c++,directx,directx-11,C++,Directx,Directx 11,我最近一直在尝试使用DirectX编程(使用C++/Win32),但遇到了一些问题 < P>一个朋友编写了一个非常简单的随机地形生成器,它与Perlin Noise一起工作,所以我试图抓取他的代码并制作一个DirectX 11渲染器,但是我的程序在运行时抛出一个“微软C++异常”,“YoCo错误”。 即使是wierder,程序也会根据构建类型在不同的代码行中断 调试时,程序在这段代码上中断: // Load the pixel shader std::ifstream pixelFile("pi

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

< P>一个朋友编写了一个非常简单的随机地形生成器,它与Perlin Noise一起工作,所以我试图抓取他的代码并制作一个DirectX 11渲染器,但是我的程序在运行时抛出一个“微软C++异常”,“YoCo错误”。 即使是wierder,程序也会根据构建类型在不同的代码行中断

调试时,程序在这段代码上中断:

// 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;
mpPixelShader是ID3D11PixelShader*类型的成员,mpVertexLayout是ID3D11InputLayout*类型的成员

当然,当我看到错误不同时,我想到的第一件事是检查内存损坏,在运行ApplicationVerifier并设置_crtDbgFlag后,我确实在我朋友的代码中找到了一个,但它现在已经修复,我仍然有这个错误


当渲染初始化函数使用MSDN Win32 DirectX三角形教程中的修改版本填充时,应用程序运行正常。

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

在这些情况下,
std::string
实际上起作用。它不使用C-style
strlen
进行长度计算,
C_str
的工作原理与
&string[0]
类似,因为数据是连续的(至少在GNU和MSVC实现上是如此)。不管怎样,我还是按照你的建议使用了std::vector,它仍然会产生相同的错误,所以问题不是从这里来的。
// Create and set the input layout
if (FAILED(mpDevice->CreateInputLayout(layoutDescription,
    layoutDescriptionSize,
    vertexContents.c_str(),
    vertexContents.length(),
    &mpVertexLayout)))
    return false;