1

私はDirectX11と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でのみ発生し、ProfessionalEditionでは発生しません。

何か案は?

4

1 に答える 1

1

この問題は、私が使用したディレクトリセパレータに関連しているようです。ファイルパスでそれらを/から\\に変更すると、すべてのバージョンで機能します。/が以前は問題なくどのように機能していたか、またはExpressとProfessionalの間で問題が発生する理由がわかりません。

于 2012-09-29T18:34:19.273 に答える