Windows runtime 我如何定义';输出';C+中的参数a+;CX Windows运行时组件?
从谷歌的角度来看,这似乎是不可能的,但是: 如何在C++/CX“ref类”中定义“out”参数 如果您的答案是这不可能,请提供参考。这是一个C#特定的关键字,COM在IDL语法中也有它。MSVC++中的等效项是[out]属性 但是不,如果您尝试使用C3115,编译器将拒绝使用它。请记住,您使用C++/CX语言扩展来编写其他语言使用的代码。一般来说,这很难支持[退出]的概念。无论是C++、JavaScript还是.NET语言,如VB.NET都支持它。您也可以在C:\Program files(x86)\Windows Kits\8.0\Include\WinRT中的.h文件中看到这一点,该文件是从具有[out]属性的同一目录中的.idl文件生成的。midl在.h文件中删除了它 无论如何,这并不重要,因为您的代码将在进程中使用,所以[out]能够优化参数值的封送处理根本没有任何好处。只要一个简单的指针就可以完成任务。但是,必须在C代码中初始化参数值是不可避免的损失。您可以使用:Windows runtime 我如何定义';输出';C+中的参数a+;CX Windows运行时组件?,windows-runtime,c++-cx,Windows Runtime,C++ Cx,从谷歌的角度来看,这似乎是不可能的,但是: 如何在C++/CX“ref类”中定义“out”参数 如果您的答案是这不可能,请提供参考。这是一个C#特定的关键字,COM在IDL语法中也有它。MSVC++中的等效项是[out]属性 但是不,如果您尝试使用C3115,编译器将拒绝使用它。请记住,您使用C++/CX语言扩展来编写其他语言使用的代码。一般来说,这很难支持[退出]的概念。无论是C++、JavaScript还是.NET语言,如VB.NET都支持它。您也可以在C:\Program files(x8
\u Out\u opt\u
\u Out\u
但这些参数仅适用于私有、内部和受保护的AFAIK成员。任何类型为
T*
(其中T
是ABI合法类型)的参数都将被编译器视为out参数,并在元数据中进行修饰。以下代码:
namespace TestMakePublic {
public ref class Class1 sealed
{
public:
void foo(int* out1, Object^* out2){}
};
}
在元数据中生成如下所示的函数(ildasm输出):
请注意,WinRT不支持“in/out”参数,因此
out1
和out2
的值仅在从函数返回时有效,不能被信任作为foo
的输入这些是SAL注释,只影响静态代码分析。在正常编译中,它们的计算结果为零。答案很有帮助。你在官方文件中有提到这一点吗?
.method public hidebysig newslot virtual final
instance void foo([out] int32& out1,
[out] object& out2) runtime managed
{
.override TestMakePublic.__IClass1PublicNonVirtuals::foo
} // end of method Class1::foo