Я всего нуб, когда дело доходит до использования задач PPL в среде C++, так что я с трудом, чтобы выяснить, что будет синтаксис C++ следующего C# код:C++ Функциональная подпись, возвращающая задачу PPL?
private static async Task<RandomAccessStreamReference> GetImageStreamRef()
{
return RandomAccessStreamReference.CreateFromStream(await GetImageStream());
}
private static async Task<IRandomAccessStream> GetImageStream()
{
var stream = new InMemoryRandomAccessStream();
var encoder = await BitmapEncoder.CreateAsync(BitmapEncoder.BmpEncoderId, stream);
encoder.SetPixelData(BitmapPixelFormat.Bgra8, BitmapAlphaMode.Ignore, width, height, 96, 96, imageBytes);
await encoder.FlushAsync();
return stream;
}
Это C# код был взят из Windows Store reversi Microsoft sample code. Лучшее, что я мог бы получить до сих пор это:
Concurrency::task<IRandomAccessStream^> GetImageStream()
{
auto stream = ref new InMemoryRandomAccessStream();
task<BitmapEncoder^>(BitmapEncoder::CreateAsync(BitmapEncoder::JpegEncoderId, Stream)).then([this, stream, width, height, imageBytes](BitmapEncoder^ encoder)
{
encoder->SetPixelData(BitmapPixelFormat::Rgba8, BitmapAlphaMode::Ignore, width, height, 96.0, 96.0, imageBytes);
return encoder->FlushAsync();
}).then([this, stream]()
{
return stream; //Does this even make sense?
});
//return stream; //Not sure if I should have this here?
}
Но он генерирует следующие компиляции ошибки:
error C4716: 'GetImageStream' : must return a value
Я понимаю, почему эта ошибка происходит, но я понятия не имею, как я могу иметь функцию который возвращает задачу без возвращаемого значения в двух разных местах? Я еще не занимался GetImageStream.
Я даже не уверен, что я взял правильный путь в это ...
Спасибо!
Вы компиляции выше код как код C++/CLI или обычный C++ код? Он не будет работать как обычный код на C++, поскольку сигнатуры каретки для типов ссылок, собранных для мусора, являются расширением C++/CLI. –
@TimoGeusch: это не C++/CLI, это C++/CX: http://programmers.stackexchange.com/questions/162168/what-are-c-cx-and-c-cli-and-how-do-they -relate-to-c-and-winrt – Matt
@TimoGeusch Да Я компилирую как C++/CX. Благодарю. – Deathicon