Windows runtime 我可以添加';运营';在winrt组件中创建runtimeclass

Windows runtime 我可以添加';运营';在winrt组件中创建runtimeclass,windows-runtime,c++-winrt,winrt-component,Windows Runtime,C++ Winrt,Winrt Component,在下面的代码中,“RuntimeMethod1()”是一个操作。它不接受任何输入参数,也不返回任何结果。 运行时类中是否允许使用这种方法 我得到这个运行时类的编译错误。上面说 应在第7行的“(”附近输入标识符 命名空间UniversalRuntimeComponent { [默认_接口] 运行时类 { 类(); RuntimeMethod1(); Int32运行时方法2(Int32 arg1); 字符串RuntimeMethod3(字符串arg1); } } 如果我从类中删除“Ru

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

我得到这个运行时类的编译错误。上面说

应在第7行的“(”附近输入标识符

命名空间UniversalRuntimeComponent
{  
[默认_接口]
运行时类
{  
类();
RuntimeMethod1();
Int32运行时方法2(Int32 arg1);
字符串RuntimeMethod3(字符串arg1);
}  
}
如果我从类中删除“RuntimeMethod1()”,那么它可以很好地编译并生成投影和实现类型


如果它不返回结果,则将其返回类型设为void

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

void RuntimeMethod1(); 

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

如果它不返回结果,则将其返回类型设为空

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

void RuntimeMethod1(); 

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

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

方法有一个(可能为空)参数列表,表示传递给该方法的值或变量引用。方法还有一个返回类型,指定该方法计算并返回的值的类型。如果不返回值,则方法的返回类型为
void

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

void RuntimeMethod1(); 
命名空间UniversalRuntimeComponent
{  
[默认_接口]
运行时类
{  
类();
void RuntimeMethod1();
Int32运行时方法2(Int32 arg1);
字符串RuntimeMethod3(字符串arg1);
}  
}
请注意,MIDL中声明的数据类型遵循MIDL规范。这与Windows运行时类型系统没有严格的关系,尽管所有MIDL数据类型都映射到可以在Windows运行时类型系统中表示的数据类型


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

除构造函数外,所有需要声明返回类型的方法。该文档包含以下内容:说:

方法有一个(可能为空)参数列表,表示传递给该方法的值或变量引用。方法还有一个返回类型,指定该方法计算并返回的值的类型。如果不返回值,则方法的返回类型为
void

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

void RuntimeMethod1(); 
命名空间UniversalRuntimeComponent
{  
[默认_接口]
运行时类
{  
类();
void RuntimeMethod1();
Int32运行时方法2(Int32 arg1);
字符串RuntimeMethod3(字符串arg1);
}  
}
请注意,MIDL中声明的数据类型遵循MIDL规范。这与Windows运行时类型系统没有严格的关系,尽管所有MIDL数据类型都映射到可以在Windows运行时类型系统中表示的数据类型


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

尽管这样做有效,但我一直在寻找与void等效的运行时。这是因为其他数据类型,如Int32、Stringetc是在Windows::Foundation中定义的。使用WinRT类型将有助于为正确的平台生成正确的类型。此外,Windows::Foundation定义一个名为“Empty”的类型,该类型不是void。c/cpp“void”类型是唯一的出路吗?RuntimeMethod1()您编写的操作似乎是一个方法调用,而不是一个声明。数据类型Int32,String未在Windows::Foundation中定义,它将在编译时找到它的相关投影类型(如String->winrt::hstring)。我找不到“Empty”在Windows::Foundation中键入。在描述不返回值的方法时,只能使用void对其进行修改。虽然这样做有效,但我一直在寻找与void等效的运行时。这是因为其他数据类型(如Int32、String等)是在Windows::Foundation中定义的。使用WinRT类型将有助于为正确的平台。此外,Windows::Foundation定义了一个名为“Empty”的类型,它不是void。c/cpp“void”类型是唯一的出路吗?您编写的RuntimeMethod1()操作似乎是一个方法调用,而不是一个声明。数据类型Int32,String在Windows::Foundation中没有定义,编译时它会找到相关的投影类型(比如String->winrt::hstring)。我找不到“空的”在Windows::Foundation中键入。当描述一个不返回值的方法时,只能使用void对其进行修改。大家都同意,但从语法的角度来看,我很乐意使用void、PVOID之类的东西,而不是void。当MIDL定义了Int32之类的类型时,它只不过是int和String,可以适当地映射基于消费者,那么为什么不定义VOID呢?我知道除了使用VOID别无选择,也没有必要对此进行争论,但我想引起大家的注意,以便MIDL团队可以考虑。在你发布的摘录中,它说“如果方法不返回值,那么它的返回类型就是VOID”我想说的是,给我一个语法来表示返回类型在Int32和String行中是无效的