[SIZE=2][COLOR=#0000ff][FONT=Courier New]public [/FONT][/COLOR][/SIZE][FONT=Courier New][SIZE=2][COLOR=#0000ff]static [/COLOR][/SIZE][SIZE=2][COLOR=#0000ff]void[/COLOR][/SIZE][SIZE=2] StaticMethodExample([[/SIZE][SIZE=2][COLOR=#008080]MarshalAsAttribute[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#008080]UnmanagedType[/COLOR][/SIZE][SIZE=2].I4)] [/SIZE][SIZE=2][COLOR=#0000ff]int[/COLOR][/SIZE][SIZE=2] size, [[/SIZE][SIZE=2][COLOR=#008080]MarshalAs[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#008080]UnmanagedType[/COLOR][/SIZE][SIZE=2].SafeArray, SafeArrayUserDefinedSubType = [/SIZE][SIZE=2][COLOR=#0000ff]typeof[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#008080]ValueType[/COLOR][/SIZE][SIZE=2]))] [/SIZE][SIZE=2][COLOR=#008080]ValueType[/COLOR][/SIZE][/FONT][SIZE=2][FONT=Courier New][] val)[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]{[/FONT][/SIZE]
[SIZE=2][FONT=Courier New]}[/FONT][/SIZE]
.NET Bug Reports
В этой теме выкладываем баги, которые были обнаружены в функционировании классов .NET или кода из .NET SDK.
Код:
А, в частности, это фрагмент:
Код:
[FONT=Courier New][[SIZE=2][COLOR=#008080]MarshalAs[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#008080]UnmanagedType[/COLOR][/SIZE][SIZE=2].SafeArray, SafeArrayUserDefinedSubType = [/SIZE][SIZE=2][COLOR=#0000ff]typeof[/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#008080]ValueType[/COLOR][/SIZE][SIZE=2]))][/SIZE][/FONT]
Вот что получаем через ILDASM:
Код:
[SIZE=3][FONT=Courier New][SIZE=2].method public hidebysig static void StaticMethodExample(int32 marshal( int32) size,[/SIZE][/FONT]
[FONT=Courier New][SIZE=2]class [mscorlib]System.ValueType[] marshal( safearray) val) cil managed[/SIZE][/FONT]
[/SIZE]
[FONT=Courier New][SIZE=2]class [mscorlib]System.ValueType[] marshal( safearray) val) cil managed[/SIZE][/FONT]
[/SIZE]
Как видим, около параметра val присутствует спецификатор marshal с параметром safearray, но вот только информация о пользовательском типе отсутствует. Сейчас разбирусь в стандарте ECMA-335, напишу так, как должно быть.