我可以将 'operations' 添加到 winrt 组件中的运行时类吗

Can I add 'operations' to runtimeclass in a winrt component

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

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

expecting an identifier near "(" at line 7

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

If I remove "RuntimeMethod1()" from the class then it compiles fine and generates the projection and implementation types.

如果没有 return 结果,则使其 return 类型无效。

将 IDL 中的第 7 行更改为以下内容:

void RuntimeMethod1(); 

然后从自动生成的 .h 文件中复制并粘贴方法,或者手动添加它。

除构造函数外,MIDL 3.0 need to declare a return type. The documentation has the following to say on methods中的所有方法:

A method has a (possibly empty) list of parameters, which represent values or variable references passed to the method. A method also has a return type, which specifies the type of the value computed and returned by the method. A method's return type is void if it doesn't return a value.

您必须将 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 中至少有一个 return 值。在 MIDL 中使用 void 声明的方法仍将 return 一个 HRESULT 来传达错误或成功。