我一直試圖進入DirectX編程(使用C++/Win32),並且遇到一些問題。DirectX創建*方法_com_error異常
一位朋友編寫了一個非常簡單的隨機地形生成器,與Perlin Noise搭配使用,所以我試圖抓住他的代碼併爲它製作一個DirectX 11渲染器,但是我的程序在運行時會拋出「Microsoft C++異常」_com_error它。
即使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;
而且上發佈:
// 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三角形教程中的修改版本時,應用程序運行良好。
在這些情況下,'std :: string'實際上起作用。由於數據是連續的(至少在GNU和MSVC實現上),所以它不使用C風格的'strlen'來計算長度,'c_str'就像'&string [0]'一樣工作。無論如何,我仍然遵循你的建議,並使用一個std ::向量,它仍然會產生相同的錯誤,所以問題不是來自這裏。 – blue