1

我一直在使用 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 中,不会发生在专业版中。

有任何想法吗?

4

1 回答 1

1

这个问题似乎与我使用的目录分隔符有关。在文件路径中将它们从 / 更改为 \\ 可以在所有版本中工作。不知道 / 以前是如何工作的,没有问题,也不知道为什么在 Express 和 Professional 之间很重要。

于 2012-09-29T18:34:19.273 回答