none
c++ - handle single-dimensional array in Microsoft Interface Definition Language RRS feed

  • 问题

  • 依照

    https://docs.microsoft.com/en-us/uwp/midl-3/intro

    描述的 single-dimensional array

    试图使用 single-dimensional array 用在生成 c++ winRT component

    Class.idl

    namespace MyClass
    {
        [default_interface]
        runtimeclass Class
        {
            Class();
            String[] aaa(String[] v);
        
        }
    }

    Class.h

    #pragma once
    
    #include "Class.g.h"
    
    namespace winrt::MyClass::implementation
    {
        struct Class : ClassT<Class>
        {
            Class() = default;
    
            hstring[] aaa(hstring[]  s);
     
        };
    }
    namespace winrt::MyClass::factory_implementation
    {
        struct Class : ClassT<Class, implementation::Class>
        {
        };
    }

    Class.cpp

    #include "pch.h"
    #include "Class.h"
    #include "Class.g.cpp"
    
    namespace winrt::MyClass::implementation
    {
    
      hstring[] Class::aaa(hstring[] s)
        {
            return null;
        }
     
    
    }

    但是报错  hstring没问题 但是貌似 hstring[] 就有问题了

    我在迁移c代码和objc代码到winrt/c++没遇见什么大问题 只有这个数组single-dimensional array 没能搞定

    所以 请教 single-dimensional array 相关的处理范例

    谢谢

     
    • 已编辑 aloha99 2020年9月5日 14:16
    2020年9月5日 14:13

答案

  • 你好,

    当在idl文件中声明String[]时,我们通常使用com_array<hstring>向Windows运行时api传递参数,而不是hstring[]。此外,您不需要手动编写aaa方法的原型。C++/WinRT中提供了 midl.exe > cppwinrt.exe工具链,它可以为您在idl文件中编写的aaa函数自动生成定义和声明该函数的模板,模板存在于您的项目文件夹中 \Project-Name\RuntimeComponent\Generated Files\sources 。您只需要打开该位置的文件,并将其中关于aaa函数的定义和声明复制到您的组件中。更多信息,请参考该文件。你也可以检查以下详细的步骤。

    1. 在组件的Class.idl文件中声明 String[] aaa(String[] v);

    2. 保存,并build该组件, 

    3. 打开项目文件夹中该位置\Project-Name\RuntimeComponent\Generated Files\sources,打开Class.h和Class.cpp文件,将aaa函数的定义和声明代码复制到组件项目中

    Class.h
    com_array<hstring> aaa(array_view<hstring const> v);
    Class.cpp
    com_array<hstring> Class::aaa(array_view<hstring const> v){    throw hresult_not_implemented();}
    更多关于winrt::com_array的信息,请参考文件

    祝好。


    "Developing Universal Windows apps" forum will be migrating to a new home on Microsoft Q&A (Preview)!
    We invite you to post new questions in the "Developing Universal Windows apps" forum’s new home on Microsoft Q&A (Preview)!
    For more information, please refer to the sticky post.

    • 已标记为答案 aloha99 2020年9月8日 14:40
    2020年9月7日 5:04