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

2024-04-08 08:38

本文主要是介绍windows RT开发笔记:WinRT DLL及其调用研究,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一. 几个概念:

  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

这篇关于windows RT开发笔记:WinRT DLL及其调用研究的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/885098

相关文章

一文教你如何解决Python开发总是import出错的问题

《一文教你如何解决Python开发总是import出错的问题》经常朋友碰到Python开发的过程中import包报错的问题,所以本文将和大家介绍一下可编辑安装(EditableInstall)模式,可... 目录摘要1. 可编辑安装(Editable Install)模式到底在解决什么问题?2. 原理3.

Python+Tkinter实现Windows Hosts文件编辑管理工具

《Python+Tkinter实现WindowsHosts文件编辑管理工具》在日常开发和网络调试或科学上网场景中,Hosts文件修改是每个开发者都绕不开的必修课,本文将完整解析一个基于Python... 目录一、前言:为什么我们需要专业的Hosts管理工具二、工具核心功能全景图2.1 基础功能模块2.2 进

Python+PyQt5开发一个Windows电脑启动项管理神器

《Python+PyQt5开发一个Windows电脑启动项管理神器》:本文主要介绍如何使用PyQt5开发一款颜值与功能并存的Windows启动项管理工具,不仅能查看/删除现有启动项,还能智能添加新... 目录开篇:为什么我们需要启动项管理工具功能全景图核心技术解析1. Windows注册表操作2. 启动文件

Java调用Python的四种方法小结

《Java调用Python的四种方法小结》在现代开发中,结合不同编程语言的优势往往能达到事半功倍的效果,本文将详细介绍四种在Java中调用Python的方法,并推荐一种最常用且实用的方法,希望对大家有... 目录一、在Java类中直接执行python语句二、在Java中直接调用Python脚本三、使用Run

使用Python开发Markdown兼容公式格式转换工具

《使用Python开发Markdown兼容公式格式转换工具》在技术写作中我们经常遇到公式格式问题,例如MathML无法显示,LaTeX格式错乱等,所以本文我们将使用Python开发Markdown兼容... 目录一、工具背景二、环境配置(Windows 10/11)1. 创建conda环境2. 获取XSLT

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

使用Python创建一个功能完整的Windows风格计算器程序

《使用Python创建一个功能完整的Windows风格计算器程序》:本文主要介绍如何使用Python和Tkinter创建一个功能完整的Windows风格计算器程序,包括基本运算、高级科学计算(如三... 目录python实现Windows系统计算器程序(含高级功能)1. 使用Tkinter实现基础计算器2.

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

Python开发文字版随机事件游戏的项目实例

《Python开发文字版随机事件游戏的项目实例》随机事件游戏是一种通过生成不可预测的事件来增强游戏体验的类型,在这篇博文中,我们将使用Python开发一款文字版随机事件游戏,通过这个项目,读者不仅能够... 目录项目概述2.1 游戏概念2.2 游戏特色2.3 目标玩家群体技术选择与环境准备3.1 开发环境3

Windows系统宽带限制如何解除?

《Windows系统宽带限制如何解除?》有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文就跟大家一起来看看Windows系统解除网络限制的操作方法吧... 有不少用户反映电脑网速慢得情况,可能是宽带速度被限制的原因,只需解除限制即可,具体该如何操作呢?本文