,uwp,c++-winrt,winrt-component"/>

首页 > 解决方案 > C++/WinRT 无法从 'winrt::com_ptr 转换参数 1' 到 'winrt::array_view

问题描述

我正在使用 C++/WinRT 为 uwp 创建一个 winrt 组件。我定义了一个类似自爆的运行时类,

namespace TagLibUWP
{
    [bindable]
    [default_interface]
    runtimeclass Picture 
    {
        Picture();
        UInt8[] Data{ get; set; };
    }
}

然后cppwinrt编译器生成这样的代码,

struct Picture : PictureT<Picture>
    {
        Picture() = default;

        com_array<uint8_t> Data();
        void Data(array_view<uint8_t const> value);
    };

winrt 组件已编译,但当另一个 UWP 应用(使用 C++/WinRT 编写)引用该组件时,该应用无法编译。

错误就像自爆,

Error   C2664    'auto winrt::impl::consume_TagLibUWP_IPicture<winrt::TagLibUWP::IPicture>::Data(winrt::array_view<const uint8_t>) const': 
cannot convert argument 1 from 'winrt::com_ptr<To>' to 'winrt::array_view<const uint8_t>'
        with
        [
            To=uint8_t []
        ]   BlankApp1   C:\Users\Cool-\source\repos\Test\TagLib\BlankApp1\Generated Files\XamlTypeInfo.g.cpp    88  

让我感到困惑的是,可以编译一个 uwp 应用程序(用 C# 编写)。

简而言之,我只想替换 C++/CX 中的 Array。我找到了这个,这不是我想要的。我想知道的是如何在 MIDL 3.0 中定义字节数组的属性。我已经像上面那样尝试过,但似乎我不能像上面那样做。
那么有人可以帮我解决这个问题吗?

标签: uwpc++-winrtwinrt-component

解决方案


推荐阅读