1
我反映了C++具有以下签名/ CLI方法:如何知道C++/CLI反射参数是long还是int?
void foo(long n);
这翻译成C#为:
void foo(int modopt(IsLong) n);
我怎么能找到,如果一个INT参数实际上一个是C++/CLI长时间反思?
我反映了C++具有以下签名/ CLI方法:如何知道C++/CLI反射参数是long还是int?
void foo(long n);
这翻译成C#为:
void foo(int modopt(IsLong) n);
我怎么能找到,如果一个INT参数实际上一个是C++/CLI长时间反思?
检查ParameterInfo
实例的可选自定义修饰符:
bool IsLongParameter(System.Reflection.ParameterInfo p) {
Type[] modifiers = p.GetOptionalCustomModifiers();
return modifiers.Contains(typeof(System.Runtime.CompilerServices.IsLong));
}
它的工作原理,但是,出于某种奇怪的原因,它不应该的方法签名恰好是无效美孚([out]长N); :( – Anzurio 2010-03-11 18:58:15
@AZ:在这种情况下,C++/CLI编译器是否附加了“IsLong”属性,还是简单地衰减为“int”? – 2010-03-11 19:01:35
使用Red Gate的.NET Reflector时,它仍然有modopt(IsLong )modifier.C#中的完整签名出现:void foo(out int modopt(IsLong)m); – Anzurio 2010-03-11 19:09:20