C++ winrt 如何返回数组asyc,在C++/商在最新的

C++ winrt 如何返回数组asyc,在C++/商在最新的,c++-winrt,C++ Winrt,如果TResult是数组,则不允许IAsyncOperation作为返回类型,那么从用C++/WinRT编写的Windows运行时组件异步返回数组的最佳方法是什么 可以将数组封装在PropertyValue中,但装箱和取消装箱都会创建副本,这似乎效率低下。目前,我正在编写一个自定义组件来存储com_数组(它有一个构造函数,允许我在com_数组中移动),并使用DetachArray函数在返回给调用方时移动数组。这是最好的方法吗?看起来有点复杂?另外,在本例中,如果我从C#调用DetachArray

如果TResult是数组,则不允许IAsyncOperation作为返回类型,那么从用C++/WinRT编写的Windows运行时组件异步返回数组的最佳方法是什么


可以将数组封装在PropertyValue中,但装箱和取消装箱都会创建副本,这似乎效率低下。目前,我正在编写一个自定义组件来存储com_数组(它有一个构造函数,允许我在com_数组中移动),并使用DetachArray函数在返回给调用方时移动数组。这是最好的方法吗?看起来有点复杂?另外,在本例中,如果我从C#调用DetachArray函数,数组是否被复制?我不知道托管内存和非托管内存之间的交互是如何工作的。我假设使用com_数组而不是std::vector与此有关。

需要传递的IAsyncOperation的TResult是Windows运行时类型。如果要返回数组,可以尝试将其用作集合对象,而不是winrt::com_数组。在这种情况下,它将很方便,不需要装箱或拆箱。例如:

Windows::Foundation::IAsyncOperation类::MyMethod()
{
Windows::Foundation::Collections::IVector coll1{winrt::single_threaded_vector()};
......
co_返回coll1;
}

谢谢您的回复。但是,我希望返回一个数组,而不是一个Windows运行时对象,因为我需要有效地访问它,并且不涉及互操作。它将是一个大字节数组-可能高达100MB,因此我正在寻找最有效的方法。我也希望有人能回答我关于阵列是否被复制的问题。你移动阵列的目的是什么?您的意思是使用std::move()方法吗?您可以展示有关如何存储com_数组和DetachArray函数的更多详细信息吗?该实现类似于CustomByteArray::CustomByteArray(com_数组和&givenBytes){swap(givenBytes,bytes);}com_数组CustomByteArray::DetachArray(){com_数组临时{};swap(bytes,temp);return temp;}有一个名为“字节”的私有成员com_数组。com_数组有一个已删除的复制构造函数,因此将由move返回。如果您想要字节数组,可以使用IBuffer。否则,DetachArray似乎在充分利用糟糕的情况。