私は、C++ 環境内で PPL タスクを使用することに関してはまったくの初心者なので、次の C# コードの C++ 構文が何であるかを理解するのに苦労しています。
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
このエラーが発生する理由は理解できますが、2 つの異なる場所で戻り値を持たずにタスクを返す関数を作成する方法がわかりません。GetImageStream にもまだ取り組んでいません。
私はこれに正しい道を歩んだかどうかさえ確信が持てません...
ありがとうございました!