首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

【windows8开发】Windows Runtime组件打包及与javascript的交互

2012-09-02 
【windows8开发】Windows Runtime组件封装及与javascript的交互/*****************************************

【windows8开发】Windows Runtime组件封装及与javascript的交互
/******************************************
开始本文之前,借块地方说明下,本文之前的所有win8系列的文章是在windows 8 consumer preview(消费者预览版)的上进行的一些尝试和分享,本文开始会切换到windows 8 release preview(发行者预览版),因为从老版本到现在的版本间,framework中一些API有所改变,所以有些示例代码并不兼容,特此说明下。
******************************************/
windows 8通过windows runtime framework支持不同语言间的交互,比如在《【windows8开发】C++开发WinRT组件和JS调用》一文里曾经介绍过javascript如何去调用C++组件,而在本文中会更关注于怎么去封装支持多语言交互的组件,组件方使用C++来描述,调用方则使用javascript,因为实例代码中会有很多关于C++ /CX的特性,所以还不了解C++ /CX的可以先阅读下这篇文章:

《【windows8开发】深入浅出C++/CX》

希望大家带着如下问题去阅读这篇文章。
1. javascript如何调用C++ API
2. C++如何返回数据给javascript
3. js和C++交互时的数据类型问题
4. 事件绑定,调用与回调

ok,进入正题。

Metro App中,要支持多语言调用,必须封装成windows runtime的组件dll,所谓windows runtime组件就是要基于windows runtime定义好的形式去封装组件API,而这些定义好的形式其实大部分都属于C++ /CX的特性,换句话说就是用C++ /CX的一些C++扩展特性来封装windows runtime组件。


0. 如何创建windows runtime组件工程
很简单,如果使用C++来封装组件的话,就在创建新工程时,选择 Visual C++ --> Windows Metro style --> Windows Runtime Component。

1. javascript调用C++类
windows runtime组件都会以类的形式给外部提供API,至少目前为止我还不知道是否可以封装成C风格函数的API。
看如下C++示例:
var eventHandler1 = function (evt) {     ......};var eventHandler2 = function (evt) {     ......};nativeObject.addEventListener("changedevent", eventHandler1);nativeObject.addEventListener("changedevent", eventHandler2);nativeObject.fireEvent();

这里eventHandler1和eventHandler2都会被触发。注意,事件名里的大写字母在用addEventListener绑定是都应该用小写,比如在C++里事件为changedEvent,js绑定时则应该是"changedevent"。


最后,总结一下,在Metro app中封装能给不同语言使用的组件,必须基于windows runtime组件的封装原则,使用C++ /CX的一些扩展特性来封装外部方法。所以如果要复用以前的windows desktop app的通用组件,就需要为这些组件再包一层windows runtime的wrap。

热点排行
Bad Request.