none
关于WinRT组件访问WinRT Dll ,求解答!(急) RRS feed

  • 问题

  • 在代码移植过程中,为了对原有的Win32 Dll充分利用。遇到的问题是:

    1.在移植过程中,如果采用Html5+CSS3+JS的模型,我的理解是:需要对原有的Win32 Dll转为WinRT Dll。

    问题是:1. JS是否可以直接访问WinRT Dll?   

               2. 如果不可以,JS可以访问WinRT组件,但在WinRT组件中如何对WinRT dll进行访问?不知道我的理解对不对,希望大虾指正。



    • 已编辑 soonf 2012年11月6日 7:07
    2012年11月6日 3:41

答案

  • WinRT组件(.winmd)形式类似于COM组件,在系统中可以注册并且发布一系列的接口,JS可以跨过语言边界,访问和使用WinRT接口,注意,必须输出成WinRT Component,然后在WinJS项目中引用.winmd元数据文件。

    JS不可以直接调用dll. WinRT组件完全可以调用dll, 但是为了能够跨语言,所以WinRT组件公开的内容必须是符合规范的,不公开的内部使用并没有过多限制,只是需要调用符合WinRT环境的API。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 soonf 2012年11月9日 2:37
    2012年11月7日 3:04
    版主

全部回复

  • WinRT组件(.winmd)形式类似于COM组件,在系统中可以注册并且发布一系列的接口,JS可以跨过语言边界,访问和使用WinRT接口,注意,必须输出成WinRT Component,然后在WinJS项目中引用.winmd元数据文件。

    JS不可以直接调用dll. WinRT组件完全可以调用dll, 但是为了能够跨语言,所以WinRT组件公开的内容必须是符合规范的,不公开的内部使用并没有过多限制,只是需要调用符合WinRT环境的API。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 soonf 2012年11月9日 2:37
    2012年11月7日 3:04
    版主
  • WinRT组件(.winmd)形式类似于COM组件,在系统中可以注册并且发布一系列的接口,JS可以跨过语言边界,访问和使用WinRT接口,注意,必须输出成WinRT Component,然后在WinJS项目中引用.winmd元数据文件。

    JS不可以直接调用dll. WinRT组件完全可以调用dll, 但是为了能够跨语言,所以WinRT组件公开的内容必须是符合规范的,不公开的内部使用并没有过多限制,只是需要调用符合WinRT环境的API。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    Bob,WinRT组件在编译完了以后会生成一个.lib文件和一个.winmd文件。

    我怎么才能应用这个组件呢???

    比如,微软给出的示例CustomeDeviceAccess的例子,里面有一个C++的Component工程和一个C#的工程。

    C#的工程依赖于这个C++ Component工程.这样在同一个解决方案中有这两个工程,所以能够正常的编译和使用。

    我想问的是,我就只给客户,C++工程生成的.lib文件和.winmd文件

    他们自己去创建一个C#或者C++或者JS的工程,他们可以引用.winmd中描述的关于驱动操作的方法吗?怎么引用?

     我刚才自己试了一下,我新建了一个工程C# windows store app工程,然后设置Reference为.winmd文件,在工程中用using关键字引用 .winmd文件的命名空间,程序可以正常编译通过,但是在调试的时候,在调用.winmd

    文件中描述的函数的时候抛出异常:

    “所请求的Windows运行时类型****未注册”?我该怎么办?谢谢


    2012年12月28日 12:19
  • 楼主遇到的问题跟我一样,不知道楼主解决了没有。

    我希望只给别人提供dll和winmd文件,APP由别人来写,但是我发现这样dll是load不起来的。并且如果我看到APPX中dll是有的。

    2013年3月5日 7:30
  • 同引用整个WinRT组件类似,将winmd和dll文件拷到APP文件夹中, 在APP的Property中 点击Common Properties 增加引用 ,选择要引用的winmd 即可。
    2013年3月5日 9:17