首页 > 解决方案 > 我可以将“操作”添加到 winrt 组件中的运行时类吗

问题描述

在下面的代码中,“RuntimeMethod1()”是一个操作。它不接受任何输入参数,也不返回任何结果。运行时类中是否允许使用这种方法?

我收到此运行时类的编译错误。它说

期待第 7 行“(”附近的标识符

namespace UniversalRuntimeComponent  
{  
    [default_interface]  
    runtimeclass Class  
    {  
        Class();  
        RuntimeMethod1();  
        Int32 RuntimeMethod2(Int32 arg1);  
        String RuntimeMethod3(String arg1);  
    }  
}

如果我从类中删除“RuntimeMethod1()”,那么它可以很好地编译并生成投影和实现类型。

标签: windows-runtimec++-winrtwinrt-component

解决方案


除构造函数外,MIDL 3.0中的所有方法都需要声明返回类型。该文档对方法有以下说明:

一个方法有一个(可能是空的)参数列表,这些参数表示传递给该方法的值或变量引用。方法也有一个返回类型,它指定方法计算和返回的值的类型。方法的返回类型是void它是否不返回值。

您必须将 MIDL 更改为以下内容:

namespace UniversalRuntimeComponent  
{  
    [default_interface]  
    runtimeclass Class  
    {  
        Class();  
        void RuntimeMethod1();  
        Int32 RuntimeMethod2(Int32 arg1);  
        String RuntimeMethod3(String arg1);  
    }  
}

请注意,MIDL 中声明的数据类型遵循 MIDL 规范。这与 Windows 运行时类型系统并不严格相关,尽管所有 MIDL 数据类型都映射到可以在 Windows 运行时类型系统中表示的数据类型。

另请注意, Windows 运行时中的所有方法在 ABI 中至少有一个返回值。在 MIDL 中声明使用的方法void仍将返回一个HRESULT以传达错误或成功。


推荐阅读