必威体育Betway必威体育官网
当前位置:首页 > IT技术

windows RT开发笔记:WinRT DLL及其调用研究

时间:2019-09-29 16:41:08来源:IT技术作者:seo实验室小编阅读:79次「手机版」
 

windows rt

一. 几个概念:

  1. WinRT :

windows runtime, windows运行时。创建Windows运行时(WinRT)是为了在Windows上给用户提供一种流畅且安全的应用体验。WinRT会受到.NET、C++、以及javaScript三者的影响。WinRT不会取代CLR或Win32,而是为那些使用不同语言编写的应用程序提供统一支持,以便它们可使用新的metro风格用户界面运行于Windows之上。

两年前,微软从一个愿望开始了Windows运行时(WinRT)的研发工作,此愿望是,建立一个更好的开发平台,让开发者在此平台上使用具有丰富智能感知功能和优秀调试功能的工具来创造快速、流畅、可靠的应用程序,而且开发者可自由选择所使用的语言和库。最终结果是产生了一种架构以及一组可以从.NET语言(C#、VB.NET、F#)、C++、以及HTML/JavaScript调用的API。所有这些语言都会对WinRT的设计产生影响。WinRT不是为了取代.NET或Win32提供的所有功能,但是它是一个公共平台,以便那些使用不同语言编写的应用程序可使用新的Metro风格界面来运行。

(详细介绍参见:http://www.infoq.com/cn/news/2011/09/Design-Details-Windows-Runtime)

2. Win32 dll:

  传统的Win32 dll

3. WinRT dll:

可以把WinRT dll看做是传统的Win32 dll,它们都是按照传统dll的封装形式,把接口或者类export出来,唯一的区别就是WinRT dll可以支持WinRT及其API。

4. WinRT component

WinRT组件的最大目的就是为了使组件能更好的支持被多种开发语言使用(js,C++,C#,VB)。而为了让开发者可以更方便的开发WinRT组件,微软又扩展了C++,也就是所谓的C++ /CX,所以基于C++ /CX风格的WinRT组件在接口风格,export形式上跟传统dll会有一定区别。

5. Windows Store APPlication:

Windows应用商店程序。Windows 应用商店应用是一类新型的应用程序,它在 Windows 8 设备上运行。Windows 应用商店应用不同于传统桌面应用。简单来说就是具有Metro风格的应用。

可以使用JavaScript、C#、Visual Basic 或 C++创建 Windows 应用商店应用。甚至可以采用一种语言编写组件,然后在采用另一种编程语言编写的应用中使用这些组件。

Windows 应用商店应用可以使用 Windows 运行时,一个内置于操作系统的本机 API。此 API 采用 C++ 实现,并支持 JavaScript、C#、Visual Basic 和 C++,对于每种语言都以非常自然的方式支持。

6.  Windows8 Platform and Tools图

 

二. 在Windows Store app中如何复用传统Win32 dll:

  1. 新建一个WinRT dll的工程,把原来win32 dll的代码和配置直接移过来,编译时应该会发现一堆错误,基本应该都属于原来代码中用到了很多WinRT中不再支持的API,关于API的整合可以参考下文:

(【windows8开发】现有代码移植到Metro App所必须的API整合

http://blog.csdn.net/my_business/article/details/7895879 )

2. WinRT Dll 编译通过后,可以被WinRT组件和Windows应用商店程序调用。但是在调用时有一些限制。

简单来说就是:如果你的Windows Store app本身就是想用C++实现,那你可以在app中直接象往常加载dll一样的调用方式(导入lib或者loadlibrary),就可以使用WinRT DLL了。

如果你的app本身要用C++以外的语言,C#或者js,那最好还是再封装一个WinRT组件,把WinRT DLL的接口包进来,方便被App调用, 有些文档中说可以在C#等app中直接add reference来关联WinRT DLL,但我试下来都失败了,而且即使是封装的WinRT组件,也必须是C++的工程,否则也无法引用WinRT DLL。

下面是我试验得出的结论:

  

3.  应注意的问题:

(1).在WinRT DLL工程中,在.h文件开头处,确保将 __declspec(dllexport) 用于你准备导出的函数,例如可以加入下列宏定义:

#ifdef ROOTERLIB_EXPORTS

#define ROOTERLIB_API  __declspec(dllexport)

#else

#define ROOTERLIB_API __declspec(dllimport)

#endif

然后,在定义类的时候,使用宏定义即可:

class ROOTERLIB_API CRooterLib

{

public:

   CRooterLib(void);

   double SquareRoot(double v);

private:

};

(2). 在WinRT DLL工程属性中要确保“Windows Store App Support”属性设置正确,Win32 dll工程中是No,而WinRT DLL中则是Yes:

 

(3). 创建WinRT DLL工程时,默认情况下是不支持WinRT API以及C++ /CX的,如果需要支持则需要进行如下改动:

 

注意当这里追加/ZW属性后,则一定要把/GM项去掉:

  

(4).在编译时,要注意WinRT DLL,WinRT组件,Windows Store App,三者之间的编译平台要保持一致,否则会编译通不过:

  

转载自:http://www.cnblogs.com/nio-nio/p/3410180.html

相关阅读

iOS学习 --- 制作并调用Bundle资源包

背景: 在开发项目中,我们公司的产品要给别人用,除了把代码封装成静态库之外,还需要把你的图片等资源封装成bundle包。 这样,别人拿

浏览器调用摄像头是怎么回事?VIVO NEX成流氓APP鉴定器

A5创业网(公众号:iadmin5)6月29日报道,前几日Vivo发布了一款NEX手机,该手机的最大亮点是使用了升降式前置摄像头。有用户反应,在Vivo NE

module_init的调用过程

不知不觉,其实也已经做bsp快三年了. 有些知识点,开始大概知道一点,但是还是比较抽象的. 经过这么长时间的使用,还是觉得有必要好

java调用webservice接口 三种方法

摘自其它:webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webser

PHP中调用filesize后,无法取得文件的真实大小

在处理中,需要每隔一段时间看一下文件的大小。使用filesize后,最初取得的大小是正确的,后来就变的不正确了。一直是一个固定的值。调

分享到:

栏目导航

推荐阅读

热门阅读