在上一篇简略介绍了Framework 和WinRT 的交互 ,更加强大远不止这些,我们可以实现跨语言的调用,而且这种调用是非常简单的

比如我们用C#写了一些类库 然后可以用JS 来调用我们写的方法。

我们新建立一个类库项目 image

 

    public sealed class WinRT
    {         
        public int Test(int a, int b)
        {
            return a + b;
        }
    }
然后在输出类型上选择 WinMD(WinRT 类型,Framework是 DLL),然后编译
image

我们在随便建立一个JS orC++ 项目 引用这个WinRTTest.winmd 

image

这里以 JS 为例 VS 只能感应就可以提示我们 ,很强大

当然这些也是有限制的

  1. API 签名只使用 Windows 运行时的类型
  2. 结构体只能拥有公有的数据字段
  3. 只允许对 XAML 控件使用继承,其它类型都必须使用 sealed 关键字。
  4. 只支持内建的泛型

详见:

可供C#和Visual Basic调用的WinRT API

Using the Windows Runtime from C# and Visual Basic

这里特别推广下,讲的比我的好多了(特别感谢boolan的辛苦翻译)

 

知其然,也要知其所以然,虽然目前没更加详细的文档,但是通过反编译我们不难发现

我们在选择生成WinMD 类型时,编译器不仅生成了我们所写的类,同时还生成了一个对应的Interfaceimage

 

这里个人猜测 应该是通过这个接口,编译器才能智能的提示

 posted on 2012-02-20 15:07  沐訫  阅读(2515)  评论(0编辑  收藏  举报