I'm not sure I understand what your issue is :) None of the types you've shown are value types. What do you get for TimeSpan which should be a value type?
Jb On Tue, Jan 3, 2017 at 12:41 PM, <[email protected]> wrote: > On Tuesday, January 3, 2017 at 8:02:42 PM UTC+3, Jb Evain wrote: >> >> On Sun, Jan 1, 2017 at 6:15 PM, LRN wrote: >> >>> I've used cecil on Windows Runtime metadata files to look at the >>> interfaces it provides, and was surprised to see that 99% of all types have >>> AutoLayout attribute. MSDN says[1] that such types must not be accessible >>> via COM, because their layout is managed by the runtime and is not known at >>> compile time. Is that true? How do C++ and COM interops work then? >>> >>> [1] https://msdn.microsoft.com/en-us/library/ms182194.aspx >>> >> >> AutoLayout in that case is only important for value types. All reference >> types will be marked as auto. Are you sure you're looking at value types? >> > Well, i get things like these: > type Windows.System.Threading.TimerElapsedHandler from Windows.System. > Threading namespace > attributes Public AutoLayout Class Sealed WindowsRuntime AnsiClass > method .ctor > attributes CompilerControlled, Private, HideBySig, SpecialName, > RTSpecialName > impl attributes Managed, Runtime > sem attributes None > method Invoke > attributes CompilerControlled, Public, Virtual, HideBySig, NewSlot, > SpecialName > impl attributes Managed, Runtime > sem attributes None > type Windows.System.Threading.ThreadPoolTimer from Windows.System. > Threading namespace > attributes Public AutoLayout Class Sealed WindowsRuntime AnsiClass > method get_Period > attributes CompilerControlled, Public, Final, Virtual, HideBySig, > NewSlot, SpecialName > impl attributes Managed, Runtime > sem attributes Getter > method get_Delay > attributes CompilerControlled, Public, Final, Virtual, HideBySig, > NewSlot, SpecialName > impl attributes Managed, Runtime > sem attributes Getter > method Cancel > attributes CompilerControlled, Public, Final, Virtual, HideBySig, > NewSlot > impl attributes Managed, Runtime > sem attributes None > method CreatePeriodicTimer > attributes CompilerControlled, Public, Static, HideBySig > impl attributes Managed, Runtime > sem attributes None > custom attribute Mono.Cecil.CustomAttribute of type OverloadAttribute > blob length : 19, header = 1 > blob: > CreatePeriodicTimer > argument Mono.Cecil.CustomAttributeArgument > method CreateTimer > attributes CompilerControlled, Public, Static, HideBySig > impl attributes Managed, Runtime > sem attributes None > custom attribute Mono.Cecil.CustomAttribute of type OverloadAttribute > blob length : 11, header = 1 > blob: > CreateTimer > argument Mono.Cecil.CustomAttributeArgument > method CreatePeriodicTimer > attributes CompilerControlled, Public, Static, HideBySig > impl attributes Managed, Runtime > sem attributes None > custom attribute Mono.Cecil.CustomAttribute of type OverloadAttribute > blob length : 33, header = 1 > blob: > CreatePeriodicTimerWithCompletion > argument Mono.Cecil.CustomAttributeArgument > method CreateTimer > attributes CompilerControlled, Public, Static, HideBySig > impl attributes Managed, Runtime > sem attributes None > custom attribute Mono.Cecil.CustomAttribute of type OverloadAttribute > blob length : 25, header = 1 > blob: > CreateTimerWithCompletion > argument Mono.Cecil.CustomAttributeArgument > type Windows.System.Threading.IThreadPoolTimer from Windows.System. > Threading namespace > attributes NotPublic AutoLayout Interface Abstract WindowsRuntime > AnsiClass > method get_Period > attributes CompilerControlled, Public, Virtual, HideBySig, NewSlot, > Abstract, SpecialName > impl attributes IL > sem attributes Getter > method get_Delay > attributes CompilerControlled, Public, Virtual, HideBySig, NewSlot, > Abstract, SpecialName > impl attributes IL > sem attributes Getter > method Cancel > attributes CompilerControlled, Public, Virtual, HideBySig, NewSlot, > Abstract > impl attributes IL > sem attributes None > type Windows.System.Threading.IThreadPoolTimerStatics from Windows.System. > Threading namespace > attributes NotPublic AutoLayout Interface Abstract WindowsRuntime > AnsiClass > method CreatePeriodicTimer > attributes CompilerControlled, Public, Virtual, HideBySig, NewSlot, > Abstract > impl attributes IL > sem attributes None > custom attribute Mono.Cecil.CustomAttribute of type OverloadAttribute > blob length : 19, header = 1 > blob: > CreatePeriodicTimer > argument Mono.Cecil.CustomAttributeArgument > method CreateTimer > attributes CompilerControlled, Public, Virtual, HideBySig, NewSlot, > Abstract > impl attributes IL > sem attributes None > custom attribute Mono.Cecil.CustomAttribute of type OverloadAttribute > blob length : 11, header = 1 > blob: > CreateTimer > argument Mono.Cecil.CustomAttributeArgument > method CreatePeriodicTimer > attributes CompilerControlled, Public, Virtual, HideBySig, NewSlot, > Abstract > impl attributes IL > sem attributes None > custom attribute Mono.Cecil.CustomAttribute of type OverloadAttribute > blob length : 33, header = 1 > blob: > CreatePeriodicTimerWithCompletion > argument Mono.Cecil.CustomAttributeArgument > method CreateTimer > attributes CompilerControlled, Public, Virtual, HideBySig, NewSlot, > Abstract > impl attributes IL > sem attributes None > custom attribute Mono.Cecil.CustomAttribute of type OverloadAttribute > blob length : 25, header = 1 > blob: > CreateTimerWithCompletion > argument Mono.Cecil.CustomAttributeArgument > > And what i need to get looks something like this - > https://sourceforge.net/p/mingw-w64/mingw-w64/ci/master/ > tree/mingw-w64-headers/include/windows.system.threading.idl > Basically, i want to create all the missing idl files in mingw-w64 by > reading Windos Runtime metadata and then turn these idl files into C > headers to be able to use WinRT in C via COM. > For obvious reasons, i have to be sure that the order of method pointers > in Vtbl structs is correct and does not change at runtime. Not sure about > actual structs, like TimeSpan or SortEntry; TimeSpan only has one field, > but according to Windows SDK SortEntry must look like this: > struct __x_ABI_CWindows_CStorage_CSearch_CSortEntry > { > HSTRING PropertyName; > boolean AscendingOrder; > } ; > So, does AutoLayout influence the order (and offset?) of vtbl pointers? > And structs? > > > -- > -- > -- > mono-cecil > --- > You received this message because you are subscribed to the Google Groups > "mono-cecil" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > For more options, visit https://groups.google.com/d/optout. > -- -- -- mono-cecil --- You received this message because you are subscribed to the Google Groups "mono-cecil" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
