Windows 8ã®ãªãªãŒã¹ã«ãããéçºè
ã¯æ°ããã¯ã©ã¹ã©ã€ãã©ãªã§ããWindowsã©ã³ã¿ã€ã ã«ã¢ã¯ã»ã¹ã§ããŸãã WinRTã³ã³ããŒãã³ãã¯ãWindowsã¹ãã¢ããã³
ãã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ã§äœ¿çšã§ã
ãŸã ã ã¢ã³ãããŒãžC / C ++ã³ãŒããJavaScriptãCïŒããã³Visual Basicã§ã
Windowsã©ã³ã¿ã€ã ã¡ã¿ããŒã¿
å
éšçã«ãWinRTã³ã³ããŒãã³ãã¯COMïŒã³ã³ããŒãã³ããªããžã§ã¯ãã¢ãã«ïŒã³ã³ããŒãã³ãã§ãããã¡ã¿ããŒã¿ã䜿çšããŠAPIãèšè¿°ããããã«ãªããŸããã ãã®ã¡ã¿ããŒã¿ã¯ã* .winmdæ¡åŒµåã®ãã¡ã€ã«ã«ä¿åããã
ECMA-335æšæºã®ã»ã¯ã·ã§ã³2ïŒã¡ã¿ããŒã¿ã®å®çŸ©ãšã»ãã³ãã£ã¯ã¹ïŒã®ã«ãŒã«ã«åŸã£ãŠãšã³ã³ãŒãããã.NETã¡ã¿ããŒã¿ã®æŽæ°ããŒãžã§ã³ã衚ããŸãã éåžžã®.NET Frameworkã¢ã»ã³ããªã¯åãæšæºã䜿çšããŠãšã³ã³ãŒããããããããããã®ãã¡ã€ã«ã®å
容ã衚瀺ããã«ã¯ã䜿ãæ
£ããããŒã«ïŒ
ildasm.exe ãObject Browserãªã©ïŒã䜿çšã§ããããšã瀺åããŠããŸãã
ã»ãšãã©ã®å Žåã
ildasm.exeãŠãŒãã£ãªãã£ã§WinMDãã¡ã€ã«ã衚瀺ããããšã¯ãæšæºã®ãããŒãžã¢ã»ã³ããªã衚瀺ããããšã«éåžžã«äŒŒãŠããŸãã ç®ã«èŠããããã€ãã®éãããããŸã-äž»ã«WinMDãã¡ã€ã«ã«ã¯äžè¬ã«ãäžéèšèªïŒILïŒåœä»€ãå«ãŸããŠããŸããã 代ããã«ããããã®ãã¡ã€ã«ã¯Windowsã©ã³ã¿ã€ã ã«ãã£ãŠæäŸãããAPIãèšè¿°ããŠããŸãã ãããã®ã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ã¯ããããã®å®çŸ©ããå®å
šã«åé¢ããããšãã§ããå®éã«ã¯ããã·ã³ã³ãŒãã§èšè¿°ããããšãã§ããŸãã ãã ãããããŒãžã¢ããªã±ãŒã·ã§ã³ã®éçºè
ã«ãšã£ãŠã¯ããããŒãžã³ãŒããåŒã³åºãAPIå®çŸ©ã®ã¿ãåç
§ããå¿
èŠããããããWinRT APIã®å®è£
ã®è©³çްã¯ç¡é¢ä¿ã§ãã èå°è£ã§ã¯ãå
±éèšèªã©ã³ã¿ã€ã ïŒCLRïŒãšWindowsãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãAPIå®çŸ©ãšãã®å®è£
ãæ¥ç¶ããŸãã
ããšãã°ãWindows.Foundation.winmdã¡ã¿ããŒã¿ãã¡ã€ã«ïŒïŒ
WinDirïŒ
\ System32 \ WinMetadataãã£ã¬ã¯ããªã«ãããŸãïŒã§ã¯ã次ã®çš®é¡ã®
Windows.Foundation.Collections.PropertySetãèŠã€ããããšãã§ããŸãããã®ã³ã³ã¹ãã©ã¯ã¿ãŒã«ã¯ãæ¬äœãå«ãŸããŠããŸããã

ãã ãããã®ã¿ã€ããèšè¿°ããã¡ã¿ããŒã¿ã«ãããã¯ã©ã¹ã³ã³ã¹ãã©ã¯ã¿ãŒãåŒã³åºããããšãã«CLRãå®è£
ã€ã³ã¹ã¿ã³ã¹ãååŸã§ããŸãã
Windowsã©ã³ã¿ã€ã ã¡ã¿ããŒã¿ã衚瀺ãããšãåãšã¢ã»ã³ããªã®å®çŸ©ã§æ°ããWindowsRuntimeããŒã¯ãŒãã䜿çšãããŠããããšã«ãæ°ä»ãããšãã§ããŸãã

ãã®ããŒã¯ãŒãã¯ã³ã³ããã¹ãäŸåã§ããã䜿çšå Žæã«ãã£ãŠè§£éãç°ãªããŸãã ããšãã°ãåå®çŸ©ïŒTypeDefïŒãããŒã¯ãŒãã§ããŒã¯ãããŠããå Žåããã®åã¯Windowsã©ã³ã¿ã€ã åã·ã¹ãã ã®èŠåã«åŸãããã®åã®åŒã³åºãã¯WinRT APIã®åŒã³åºããšèŠãªãããå¿
èŠããããŸãã
WinRTã³ã³ããŒãã³ããšCLRã®çžäºäœçš
CRLã¯ã
ã©ã³ã¿ã€ã åŒã³åºãå¯èœã©ãããŒïŒRCWïŒããã³
COMåŒã³åºãå¯èœã©ãããŒïŒCCWïŒã©ãããŒãä»ããCOMã³ã³ããŒãã³ããšã®å¯Ÿè©±ããµããŒãããŸãã ãããã£ãŠãCLRã§ã¯ãWinRTãªããžã§ã¯ããžã®ãªã³ã¯ã¯
RCWãžã®ãªã³ã¯ã§ããã
RCWã«ã¯WinRTãªããžã§ã¯ããžã®ãªã³ã¯ãå«ãŸããŠããŸãã ãããã£ãŠããããŒãžã³ãŒãã¯ãåºæ¬çã«ã³ãŒããšWinRTãªããžã§ã¯ãéã®ã€ã³ã¿ãŒãã§ã€ã¹ã§ãã
RCWãšããåãããŸãã

åæ§ã«ãWindowsã©ã³ã¿ã€ã ã§ã¯ãCLRãªããžã§ã¯ããžã®ãªã³ã¯ã¯
CCWãžã®ãªã³ã¯ã§ããã
CCWã«ã¯CLRãªããžã§ã¯ããžã®ãªã³ã¯ãå«ãŸããŠããŸãã Windowsã©ã³ã¿ã€ã ã¯
CCWãšå¯Ÿè©±ããŠã管ç察象ãšã³ãã£ãã£ã®æ©èœã«ã¢ã¯ã»ã¹ããŸãã
WinRTã®çš®é¡ãšãããŒãžã³ãŒã
Windowsã©ã³ã¿ã€ã åã·ã¹ãã ã¯CLRåã·ã¹ãã ã«äŒŒãŠããŸãããWinMDãã¡ã€ã«ãæ³šææ·±ãèŠããšãAPIå®çŸ©ã§äœ¿çšãããŠããåã®äžéšããããŒãžã³ãŒãã§äœ¿çšãããŠããåãšäžèŽããªãããšãããããŸãã .NETéçºè
ã䜿ãæ
£ãããã¯ãããžã䜿çšããŠã¢ããªã±ãŒã·ã§ã³ãäœæã§ããããã«ãCLRã¯ããã€ãã®çš®é¡ã®WinRTãé ããä»ã®çš®é¡ã®WinRTãžã®ã¢ã¯ã»ã¹ãæäŸããŠããŸãã äžè¬ã«ãWindowsã©ã³ã¿ã€ã ã«ã¯3çš®é¡ã®ã¿ã€ããããããããã®äžéšã¯ãããŒãžã³ãŒãã§ã¯ç°ãªã£ãŠèŠããŸãã
- ãããŒãžã¢ã»ã³ããªãšåãELEMENT_TYPEåæã䜿çšããŠã¡ã¿ããŒã¿ã«ãšã³ã³ãŒããããäž»èŠãªããŒã¿å ã äŸå€ã¯SByteã¿ã€ãã§ãWinRTã§ã¯ãµããŒããããŠããŸããã
- æåœ±åïŒããããããåïŒ ãWinMDãã¡ã€ã«ã§ã¯1ã€ã®åãšããŠãšã³ã³ãŒããããŸããããããŒãžã³ãŒãã§ã¯.NETã«çžåœãããã®ãšããŠè¡šç€ºãããŸãã ããšãã°ãCLRãã¡ã¿ããŒã¿ã§Windows.Foundation.Uriãèªã¿åãå Žåã代ããã«System.Uriåã䜿çšããŸãã ã€ãŸããCLRã¯WinRTåãé ããå¥ã®åãä»ããŠWinRTåãžã®ã¢ã¯ã»ã¹ãæäŸããŸãã ããã«ãCLRã¯ãããŒãžã³ãŒããšã¢ã³ãããŒãžã³ãŒãã®éã§åãããŒã·ã£ãªã³ã°ããããã System.Uriãªããžã§ã¯ããWindows.Foundation.UriãšããŠWindowsã©ã³ã¿ã€ã ã«è»¢éã§ããŸãã CLRãFCLã¿ã€ãã«æåœ±ããWinRTã¿ã€ãã®å®å
šãªãªã¹ãã¯ã ããã«ãããŸã ã
- ä»ã®ãã¹ãŠã®ã¿ã€ã ã WinRT APIã¿ã€ãã®å€§éšåã¯ããã®ãŸãŸ.NETéçºè
ã«æäŸãããŸãã ããšãã°ã Windows.UI.Xaml.Controls.Buttonã¯ã©ã¹ã䜿çšããå ŽåãCLRã¯ãã®ã¿ã€ãã®ç¹å¥ãªãã¥ãŒãŸãã¯ããŒã·ã£ãªã³ã°ãæäŸããŸããã CLRãæ¡åŒµã¡ãœãããæäŸããã¿ã€ãããã®ã«ããŽãªã«å«ãŸããŸãã ããšãã°ã System.IO.StreamããæŽŸçããåãå¿
èŠãšãã.NET Frameworkã¯ã©ã¹ã§Windows.Storage.IInputStreamã®WinRTã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ãããªããžã§ã¯ãã䜿çšããã«ã¯ãSystemã¢ã»ã³ããªã®System.IO.WindowsRuntimeStreamExtensionsã¯ã©ã¹ã§å®çŸ©ãããŠããæ¡åŒµã¡ãœããã䜿çšããå¿
èŠããããŸãã Runtime.windowsruntime.dllã
è峿·±ãããšã«ãWindowsã¡ã¿ããŒã¿ãšã³ã³ãŒãã£ã³ã°ã®éèŠã§ã¯ãªãå Žæã«è¡šç€ºãããåã®å°ããªã«ããŽãªããŸã ãããŸãã ãããã¯ãWinRTåãèšè¿°ããããã«ã®ã¿äœ¿çšããã.NET Frameworkåã§ãã ããšãã°ãWindowsã©ã³ã¿ã€ã ããªã²ãŒãã¯åºæ¬å
System.MulticastDelegateã§ãšã³ã³ãŒããããŸãããããã¯ãã¹ãŠã®Windowsã©ã³ã¿ã€ã ããªã²ãŒãããããŒãžã³ãŒãããæŽŸçããããšãæå³ããŸããã 代ããã«ãåºæ¬åã¯ã¡ã¿ããŒã¿ããŒã¯ã³ãšããŠåã«äœ¿çšãããåãããªã²ãŒãåã§ããããšã瀺ããŸãã

ã¿ã€ãæåœ±
CLRãWinRTã¿ã€ããæåœ±ïŒè¡šç€ºïŒãããšãã2ã€ã®æäœãå®è¡ããŸãã
- CLRã¯ãWindowsã©ã³ã¿ã€ã ã¿ã€ãããããªãã¯ã§ã¯ãªããã©ã€ããŒããšããŠå®çŸ©ããŸãã ããã«ããããœãŒã¹ã¿ã€ãããããŒãžã³ãŒãããèŠããªããªããŸãã ã€ãŸã ãããŒãžã³ãŒãã«é¢ããŠã¯ãååšããå¯äžã®åã¯.NET Frameworkåã§ããããããã³ã°ã®ã¿ãŒã²ããã§ãã
- ãœãŒã¹ã¿ã€ããžã®ãã¹ãŠã®åç
§ã¯ãã¿ãŒã²ãã.NET Frameworkã¿ã€ããžã®åç
§ã«å€æãããŸãã
ãããã£ãŠãCLRã¯
IVector <T>ã€ã³ã¿ãŒãã§ã€ã¹ã
IList <T>ãšããŠè¡šã
ãŸã ãIVector<T> CLRã®åå®çŸ©ã¯ããããªãã¯ã¹ã³ãŒãã§ã¯ãªããã©ã€ããŒãã¹ã³ãŒããæã€åå®çŸ©ãšèŠãªãããŸãã åæ§ã«ãIVector <UIElement>ãå®è£
ãã
Windows.UI.Xaml.Controls.UIElementCollectionã¿ã€ãã¯ãCLRã«ãã£ãп޿°ãããŸãã
IVector <T>ã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£
ã¯
IList <T>ã«ãªãã€ã¬ã¯ããããããããããŒãžã³ãŒãã®UIElementCollectionã¯IList <UIElement>ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ããŸãã
éåžžã
ildasm.exeã¯ããªãã€ã¬ã¯ããå«ããã«WinMDãã¡ã€ã«ã®çã®è¡šçŸã衚瀺ããŸãã ãªãã€ã¬ã¯ããæå¹ã«ããŠWinMDãã¡ã€ã«ã®å
容ã衚瀺ããã«ã¯ã/ projectãªãã·ã§ã³ãæå®ããå¿
èŠããããŸãã ãã®ãªãã·ã§ã³ã䜿çšãããšãCLRããã£ã¹ã¯äžã®ã¡ã¿ããŒã¿ã衚瀺ããæ¹æ³ã確èªã§ããŸãã
ããŒã¹ã¿ã€ã
WinRTã³ã³ããŒãã³ãã«ã¯å
±éã®åºæ¬ã¯ã©ã¹ã¯ãããŸãããããã¹ãŠã®Windowsã©ã³ã¿ã€ã ã¯ã©ã¹ã¯
IInspectableã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ããå¿
èŠããããããã¯
IUnknownã€ã³ã¿ãŒãã§ã€ã¹ãç¶æ¿ããŸãïŒããã¯é©ãã¹ãããšã§ã¯ãããŸããïŒã ãã ãã.NETéçºè
ã«ãšã£ãŠããã¹ãŠã®WinRTåã¯
System.ObjectããæŽŸçããåã®ããã«èŠããããã
Equalsã
GetHashCodeãªã©ã®ã¡ãœãããç¶æ¿ããŸãã ããã¯ãCLRãå®è¡æã«ãªããžã§ã¯ããããŒã·ã£ãªã³ã°ããŠWinRTãã¥ãŒãš.NETãã¥ãŒéã§åã倿ããããã«å¯èœã«ãªããŸããã
æ§é
WinRTæ§é äœã¯ãéèŠãªCLRåãšã¯ç°ãªããåºæ¬åã®1ã€ã®ãªãŒãã³ãã£ãŒã«ãã®ã¿ãå«ãããšãã§ãããŸãã¯å¥ã®WinRTæ§é äœã«ããããšãã§ããŸãã ãããã£ãŠã次ã®ã³ãŒãã¯ã³ã³ãã€ã«æ®µéã§ãšã©ãŒãã¹ããŒããŸãã
public struct MyStruct { // 'MyStruct' contains non-public field 'MyStruct.i'. // Windows Runtime structures can contain only public fields. private Int32 i; //Windows Runtime structures can contain only fields. public MyStruct(Int32 i) { this.i = i; } //Windows Runtime structures can contain only fields. public void MyFunc() { } }
ããã«ãWinRTæ§é äœã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒãå®çŸ©ãããããã«ããŒã¡ãœãããå«ããããšã¯ã§ããŸããã ãã ãã䟿å®äžãäžéšã®CLRæ§é ã¯ç¬èªã«æåœ±ããããããéçºè
ã«ãã«ããŒã¡ãœãããšã³ã³ã¹ãã©ã¯ã¿ãŒãæäŸãããŸãã ãããã«ã¯ãããšãã°ã
Windows.Foundation.Point ã
Windows.Foundation.Sizeãããã³
Windows.Foundation.Rectã®æ§é ãå«ãŸããŸãã
è¡
WinRTã®
System.Stringåã¯
HSTRINGãšããŠè¡šãã
ãŸã ã Windowsã©ã³ã¿ã€ã ã¡ãœãããåŒã³åºããšãCLRã¯ã¡ãœãããåŒã³åºãåã«.NET Frameworkæååã
HSTRINGã«å€æããŸãã åæ§ã«ãCLRã¯ãã©ã³ã¿ã€ã ã¡ãœããããè¿ãããè¡ã
System.Stringåã«å€æã
ãŸã ã å¥ã®æ©èœããããŸã-WinRTåã·ã¹ãã ã§ã¯ãæååãnullã«ããããšã¯ã§ããŸããã nullã®ä»£ããã«ã
String.Emptyã䜿çšããŠç©ºã®æååãæž¡ãå¿
èŠããããŸãã nullãæååãšããŠWinRT颿°ã«æž¡ãããšãããšãCLRã¯
ArgumentNullExceptionãã¹ããŒããŸãã åæ§ã«ãWinRT颿°ãnullæååãè¿ãããšã¯æ±ºããŠãããŸããã空æååã®ã¿ã§ãã
ãã«äºæã¿ã€ã
WinRT APIã¯ã
Windows.Foundation.IReference <T>ã€ã³ã¿ãŒãã§ã€ã¹ã䜿çšããŠnulläºæã®éèŠãªåãå®çŸ©ããŸããããã¯ãCLRãç¬èªã®
System.Nullable <T>ã«æåœ±ããŸãã ããšãã°ãWinMDãã¡ã€ã«ã®ã¡ãœããã«æ¬¡ã®ã·ã°ããã£ãããå ŽåïŒ
IReference<bool> Method(IReference<int> i);
ãããŒãžã³ãŒãã§ã¯ããã®ã¡ãœããã¯æ¬¡ã®ããã«ãªããŸãã
Nullable<bool> Method(Nullable<int> i);
代衚è
WinRTããã©ã¡ãŒã¿ãŒã¿ã€ããŸãã¯ããªã²ãŒãã®æ»ãå€ãšããŠäœ¿çšã§ããã®ã¯ãWinRTäºæã¿ã€ãã®ã¿ã§ãã ãŸããã°ããŒãã«ïŒãããªãã¯ïŒã¹ã³ãŒããæã€ããªã²ãŒãããã¹ããšããŠå®£èšããããšã¯ã§ããŸããïŒå®éããããã¯Windowsã©ã³ã¿ã€ã å
šäœã®äžè¬çãªèŠåã§ãïŒã ããªã²ãŒããªããžã§ã¯ããWindowsã©ã³ã¿ã€ã ã³ã³ããŒãã³ãã«æž¡ããšããã®ãªããžã§ã¯ãã¯
CCWã©ãããŒã«ã©ãããããŸã
ãCCWã©ãããŒã¯ã䜿çšããã³ã³ããŒãã³ãã«ãã£ãŠè§£æŸããããŸã§ãã¬ããŒãžã³ã¬ã¯ã¿ãŒã«ãã£ãŠç Žæ£ãããŸããã ãã1ã€ã®è峿·±ãäºå®ã¯ãWinRTããªã²ãŒãã«BeginInvokeã¡ãœãããšEndInvokeã¡ãœããããªãããšã§ãã
ã€ãã³ã
WinRTã³ã³ããŒãã³ãã¯ãWinRTããªã²ãŒãã¿ã€ãã®ã¿ã䜿çšããŠã€ãã³ããå®çŸ©ã§ããŸãã CLRã.NET Framework
System.EventHandler <TEventArgs>ããªã²ãŒãåã«
ããããã
Windows.Foundation.EventHandler <T>ããªã²ãŒãåããããŸãã ã€ãã³ãã¡ã³ããŒãå®çŸ©ããå ŽåïŒ
public event EventHandler<RoutedEventArgs> MyEvent;
次ã«ããã®ã³ãŒãè¡ãã³ã³ãã€ã«ãããšãã«ãã³ã³ãã€ã©ãŒã¯æ¬¡ã®åœä»€ã«å€æããŸãã
private EventRegistrationTokenTable<EventHandler<RoutedEventArgs>> MyEvent; public EventRegistrationToken add_MyEvent(EventHandler<RoutedEventArgs> handler) { return EventRegistrationTokenTable<EventHandler<RoutedEventArgs>> .GetOrCreateEventRegistrationTokenTable(ref MyEvent) .AddEventHandler(handler); } public void remove_MyEvent(EventRegistrationToken token) { EventRegistrationTokenTable<EventHandler<RoutedEventArgs>> .GetOrCreateEventRegistrationTokenTable(ref MyEvent) .RemoveEventHandler(token); }
åãšåæ§ã«ãã³ã³ãã€ã©ã¯ããã©ã€ããŒããã£ãŒã«ããšãã€ãã³ãã®ç»é²ãšãµãã¹ã¯ã©ã€ãè§£é€ã®ããã®2ã€ã®ã¢ã¯ã»ãµã¡ãœãããäœæããŸãã ãã ãããããã®ã¡ãœããã®ãã£ãŒã«ããšã³ã³ãã³ãã®ã¿ã€ãã¯ããããŸã§äœ¿çšããŠãããã®ïŒ
Delegate.Combineããã³
Delegate.Remove ïŒãšã¯ç°ãªããŸãã äžè¬åãããã¯ã©ã¹
EventRegistrationTokenTable <T>ã¯ãã£ãŒã«ãã¿ã€ããšããŠäœ¿çšããããã®ã¿ã€ãåŒæ°ã¯å¯Ÿå¿ããããªã²ãŒãã¿ã€ãã§ãã ãã®ã¯ã©ã¹ã¯ãã€ãã³ããã³ãã©ãŒã衚ãããªã²ãŒãã®ãã§ãŒã³ãæ ŒçŽããŸãã æ°ãããã³ãã©ãŒã远å ãããšã
EventRegistrationTokenããŒã¯ã³ã
è¿ãããŸã ããã
㯠ãåŸã§ã€ãã³ããã³ãã©ãŒãåé€ããããã«äœ¿çšã§ããŸãã
public void RaiseEvent() { var list = EventRegistrationTokenTable<EventHandler<RoutedEventArgs>> .GetOrCreateEventRegistrationTokenTable(ref MyEvent) .InvocationList; if (list != null) list(this, new RoutedEventArgs()); } public void Main() { var myClass = new MyClass(); var token = myClass.add_MyEvent(Handler); myClass.RaiseEvent(); myClass.remove_MyEvent(token); myClass.RaiseEvent(); } private void Handler(object sender, RoutedEventArgs args) { Debug.WriteLine("event handling"); }
ã€ãã³ããçºçãããã«ã¯ã
InvocationListããããã£ã䜿çšããŸãããã®ããããã£ã¯ãã€ãã³ããã³ãã©ãŒãšããŠè¿œå ããããã¹ãŠã®ããªã²ãŒããåŒã³åºããªã¹ãã«å«ãããªã²ãŒããè¿ããŸãã
æ¥æ
WinRTã§ã¯ãæå»ãšæ¥ä»ã¯
Windows.Foundation.DateTimeæ§é äœã«ãã£ãŠUTCã§è¡šãããŸãã CLRã¯ããã®åã
System.DateTimeã§ã¯ãªã
System.DateTimeOffsetæ§é äœã«ãããããŸãã
DateTimeã«ã¯ã¿ã€ã ãŸãŒã³æ
å ±ãå«ãŸããŠããªãããšã«æ³šæããŠãã ããã ãããã£ãŠãWinRT颿°ã«ãã£ãŠUTC圢åŒã§è¿ãããæ¥ä»ãšæå»ã¯ãCLRã«ãã£ãŠããŒã«ã«æå»ã«å€æãããŸãã éã«ã
DateTimeOffsetæ§é äœãWinRT颿°ã«æž¡ããšãæ¥ä»ãšæå»ã¯UTC圢åŒã«å€æãããŸãã
é
å
WinRT APIã¯1次å
é
åã®ã¿ããµããŒãããŸãã ãããã£ãŠã次ã®ã³ãŒãã§ã¯ã³ã³ãã€ã«æãšã©ãŒãçºçããŸãã
// Arrays in Windows Runtime method signatures must be one dimensional. public int[,] MyFunc() { return new int[5, 5]; }
ãããŒãžã³ãŒãã§ã¯ãé
åã¯åç
§ã«ãã£ãŠæž¡ãããé
åã®èŠçŽ ãžã®å€æŽã¯ããã®é
åã®ã€ã³ã¹ã¿ã³ã¹ãžã®ãªã³ã¯ãæã€ãã¹ãŠã®ã³ãŒãã«è¡šç€ºãããŸãã ãã ããWinRTã®å Žåãé
åã®å
容ã¯ãAPIã
System.Runtime.InteropServices.InAttributeããã³
System.Runtime.InteropServices.OutAttributeã䜿çšããŠãã®çœ²åã§å®çŸ©ããæ¹åã«ã®ã¿ããŒã·ã£ãªã³ã°ããããããåžžã«ãããšã¯éããŸããã ã©ã¡ãã®å±æ§ãã¡ãœããã®ãã©ã¡ãŒã¿ãŒãŸãã¯æ»ãå€ã«é©çšãããå®è¡æã«ç®¡ç察象ã¡ã¢ãªãšç®¡ç察象å€ã¡ã¢ãªã®éã§ããŒã·ã£ãªã³ã°ã®æ¹åãæ±ºå®ããŸãã Windowsã©ã³ã¿ã€ã ã§ã¯ããã©ã¡ãŒã¿ãŒã¯èªã¿åãå°çš[InAttribute]ãŸãã¯æžã蟌ã¿å°çš[OutAttribute]ã®ããããã§ããã[InAttribute]ã[OutAttribute]ã®èªã¿åããšæžã蟌ã¿ãåæã«ããŒã¯ããããšã¯ã§ããŸããã ã€ãŸããã¡ãœããã«æž¡ãããé
åã®å
容ãšé
åèªäœã¯ãèªã¿åããŸãã¯æžã蟌ã¿ãè¡ãå¿
èŠããããŸãã ãããã£ãŠã[InAttribute]屿§ã§ããŒã¯ãããé
åã®å
容ã¯ãåŒã³åºãããã¡ãœããã«ã³ããŒããããããã¡ãœãããé
åã«é©çšãããã¹ãŠã®å€æŽã¯ãåŒã³åºãå
ã®ãªããžã§ã¯ãã«ã¯è¡šç€ºãããŸããã åæ§ã«ã[OutAttribute]屿§ã§ããŒã¯ãããé
åã®å
容ã¯ãåŒã³åºãããã¡ãœããã«ãã£ãŠèšå®ãããåŒã³åºãå
ã®ãªããžã§ã¯ãã«ã³ããŒããããããåŒã³åºãããã¡ãœããã¯å
ã®é
åã®å
容ã«ã€ããŠä»®å®ããŸããã
ã³ã¬ã¯ã·ã§ã³
ã³ã¬ã¯ã·ã§ã³ã転éãããšããCLRã¯ã³ã¬ã¯ã·ã§ã³ãªããžã§ã¯ãã
CCWã©ãããŒã«ããã¯ããWinRT APIã§ã³ã¬ã¯ã·ã§ã³ã«ãªã³ã¯ãæž¡ããŸãã åæã«ãã©ãããŒãä»ããåŒã³åºãã¯çžäºäœçšã®å¢çãè¶ããçç£æ§ã«æªåœ±é¿ãåãŒããŸãã ãã ããé
åãšã¯ç°ãªããèŠçŽ ãã³ããŒããã«æäœãå®è¡ã§ããŸãã
ãããã«
èŠçŽãããšãCLRã®å€æŽã«ããããããŒãžã³ãŒãéçºè
ã¯äœ¿ãæ
£ãããã¯ãããžã䜿çšããŠãæ°ããWindowsã©ã³ã¿ã€ã APIã«ç°¡åã«é©å¿ã§ããããšã«æ³šæããŠãã ããã ãã®èšäºã§ã¯ãWinRTãšCLRã®çžäºäœçšã®è©³çްããã¯ã»ã©é ãããšã説æããŸããã ãã ããããã¯ãWindowsã©ã³ã¿ã€ã ã®ãããªã調æ»ãšããæ·±ãçè§£ã®åºç€ãæäŸã§ããŸãã