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