如何在 idl 3.0 中声明嵌套模板
How to declare nested templates in idl 3.0
我希望这是一个基本问题,但我在 MSDN 或整个 Internet 上找不到任何文档或示例,但一直没有成功。
我正在用 C++/WinRT 实现一个 windows 运行时组件。我有一个异步方法扫描是否存在特定类型的设备和 returns 找到的设备的字符串(设备 ID)向量。该函数的 C++ 签名是:
static IAsyncOperation<IVector<winrt::hstring>> ScanInterfacesAsync();
我未能成功编写将此函数投射到运行时的 IDL。我的最佳猜测:
static IAsyncOperation<IVector<String>> ScanInterfacesAsync();
失败并出现错误:
error MIDL2025: [msg]syntax error [context]: expecting > or , near ">>"
我已经尝试了一些其他的东西,但我可以说我根本不理解 IDL 如何与模板一起工作。而且我在任何在线 IDL 文档中都找不到模板化 return 类型的任何示例。
这可能吗?什么是正确的语法?任何指向我忽略的文档的指针?谢谢
错误消息似乎表明 MIDL 3.0 uses a greedy parser. It interprets the two consecutive closing angle brackets (>
) as a single right-shift operator (>>
), much like C++ did prior to C++11 (see right angle bracket).
要解决此问题,MIDL 3.0 源代码需要在连续的右尖括号之间引入任意白色 space(例如单个 space 字符),以便将其解释为两个不同的标记反对单一的令牌。应编译以下内容:
static IAsyncOperation<IVector<String> > ScanInterfacesAsync();
我希望这是一个基本问题,但我在 MSDN 或整个 Internet 上找不到任何文档或示例,但一直没有成功。
我正在用 C++/WinRT 实现一个 windows 运行时组件。我有一个异步方法扫描是否存在特定类型的设备和 returns 找到的设备的字符串(设备 ID)向量。该函数的 C++ 签名是:
static IAsyncOperation<IVector<winrt::hstring>> ScanInterfacesAsync();
我未能成功编写将此函数投射到运行时的 IDL。我的最佳猜测:
static IAsyncOperation<IVector<String>> ScanInterfacesAsync();
失败并出现错误:
error MIDL2025: [msg]syntax error [context]: expecting > or , near ">>"
我已经尝试了一些其他的东西,但我可以说我根本不理解 IDL 如何与模板一起工作。而且我在任何在线 IDL 文档中都找不到模板化 return 类型的任何示例。
这可能吗?什么是正确的语法?任何指向我忽略的文档的指针?谢谢
错误消息似乎表明 MIDL 3.0 uses a greedy parser. It interprets the two consecutive closing angle brackets (>
) as a single right-shift operator (>>
), much like C++ did prior to C++11 (see right angle bracket).
要解决此问题,MIDL 3.0 源代码需要在连续的右尖括号之间引入任意白色 space(例如单个 space 字符),以便将其解释为两个不同的标记反对单一的令牌。应编译以下内容:
static IAsyncOperation<IVector<String> > ScanInterfacesAsync();