windows-runtime - 我可以将“操作”添加到 winrt 组件中的运行时类吗
问题描述
在下面的代码中,“RuntimeMethod1()”是一个操作。它不接受任何输入参数,也不返回任何结果。运行时类中是否允许使用这种方法?
我收到此运行时类的编译错误。它说
期待第 7 行“(”附近的标识符
namespace UniversalRuntimeComponent
{
[default_interface]
runtimeclass Class
{
Class();
RuntimeMethod1();
Int32 RuntimeMethod2(Int32 arg1);
String RuntimeMethod3(String arg1);
}
}
如果我从类中删除“RuntimeMethod1()”,那么它可以很好地编译并生成投影和实现类型。
解决方案
除构造函数外,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
以传达错误或成功。
推荐阅读
- github - 如何保存 Jupyter html 输出的图像快照?
- android-studio - Android 项目同步失败
- javascript - react-swipable-views 使用时显示错误
- json - 用 Manatee.Json 替换 System.Text.Json 以在 .NET Core 3 中进行序列化
- excel - 从 InputBox 传递用户选择以用作 Application.Run 的参数
- javascript - 在新标签 JS 中打开格式化的 URL
- google-app-maker - 我们可以将 Twilio 集成到 Google App Maker 中吗?
- javascript - 如何在角度编辑图标上调用函数?
- php - 不能将 Illuminate\Database\Query\Builder 类型的对象用作数组
- javascript - 无法在 codewars 中通过 kata Pokemon Damage Calculator,但我找不到错误?