Qualsiasi parametro che sia di tipo T*
(dove T
è un tipo ABI-legale) verrà considerato dal compilatore come un parametro esterno e decorato nei metadati come tali. Il codice seguente:
namespace TestMakePublic {
public ref class Class1 sealed
{
public:
void foo(int* out1, Object^* out2){}
};
}
Produce una funzione in metadati che assomiglia a questo (uscita ildasm):
.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
noti che WinRT fa non supporto "in/out" parametri, così il valore di out1
e è valido solo per il ritorno dalla funzione e non può essere considerato attendibile come input per foo
.
fonte
2013-04-12 19:48:57
Queste sono annotazioni SAL e interessano solo l'analisi del codice statico. Nella compilazione normale valutano a nulla. –