我一直在使用 DirectX 11 和 XAML 编写我的 XNA 教程的一个版本,并且在总体上做得很好。
今天,VS 2012 Professional 的试用版过期了,所以我安装了 Express Edition,以确保到目前为止我所做的一切都能正常构建/运行。事实证明它不是。
在我加载顶点/像素着色器的代码部分中,我正在使用并发任务。使用 Visual Studio 2012 Professional,这一切都很好,但是当我尝试使用 Express Edition 运行同一个项目时,我得到以下异常:
Demo.exe 中 0x76BA4B32 (KernelBase.dll) 处的第一次机会异常:0x40080201:WinRT 发起错误(参数:0x800700A1、0x00000075、0x0299DA88)。这是有问题的代码块:
auto loadVSTask = DX::ReadDataAsync(m_vertex).then([=](const Platform::Array<byte>^ bytecode) {
DX::ThrowIfFailed(
device->CreateVertexShader(
bytecode->Data,
bytecode->Length,
nullptr,
&m_vertexShader
)
);
DX::ThrowIfFailed(
device->CreateInputLayout(m_layout, m_layoutElements, bytecode->Data, bytecode->Length, &m_inputLayout)
);
});
// Function that reads from a binary file asynchronously.
inline Concurrency::task<Platform::Array<byte>^> ReadDataAsync(Platform::String^ filename)
{
using namespace Windows::Storage;
using namespace Concurrency;
auto folder = Windows::ApplicationModel::Package::Current->InstalledLocation;
return create_task(folder->GetFileAsync(filename)).then([] (StorageFile^ file)
{
return FileIO::ReadBufferAsync(file);
}).then([] (Streams::IBuffer^ fileBuffer) -> Platform::Array<byte>^
{
auto fileData = ref new Platform::Array<byte>(fileBuffer->Length);
Streams::DataReader::FromBuffer(fileBuffer)->ReadBytes(fileData);
return fileData;
});
}
使用文件加载的非异步版本可以正常工作,并且一切运行良好。重申一下,这只发生在 Visual Studio 2012 Express 中,不会发生在专业版中。
有任何想法吗?