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

相关文章

SpringBoot 多环境开发实战(从配置、管理与控制)

《SpringBoot多环境开发实战(从配置、管理与控制)》本文详解SpringBoot多环境配置,涵盖单文件YAML、多文件模式、MavenProfile分组及激活策略,通过优先级控制灵活切换环境... 目录一、多环境开发基础(单文件 YAML 版)(一)配置原理与优势(二)实操示例二、多环境开发多文件版

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

Python实战之SEO优化自动化工具开发指南

《Python实战之SEO优化自动化工具开发指南》在数字化营销时代,搜索引擎优化(SEO)已成为网站获取流量的重要手段,本文将带您使用Python开发一套完整的SEO自动化工具,需要的可以了解下... 目录前言项目概述技术栈选择核心模块实现1. 关键词研究模块2. 网站技术seo检测模块3. 内容优化分析模

基于Java开发一个极简版敏感词检测工具

《基于Java开发一个极简版敏感词检测工具》这篇文章主要为大家详细介绍了如何基于Java开发一个极简版敏感词检测工具,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下... 目录你是否还在为敏感词检测头疼一、极简版Java敏感词检测工具的3大核心优势1.1 优势1:DFA算法驱动,效率提升10

Java调用Python脚本实现HelloWorld的示例详解

《Java调用Python脚本实现HelloWorld的示例详解》作为程序员,我们经常会遇到需要在Java项目中调用Python脚本的场景,下面我们来看看如何从基础到进阶,一步步实现Java与Pyth... 目录一、环境准备二、基础调用:使用 Runtime.exec()2.1 实现步骤2.2 代码解析三、

Python如何调用另一个类的方法和属性

《Python如何调用另一个类的方法和属性》在Python面向对象编程中,类与类之间的交互是非常常见的场景,本文将详细介绍在Python中一个类如何调用另一个类的方法和属性,大家可以根据需要进行选择... 目录一、前言二、基本调用方式通过实例化调用通过类继承调用三、高级调用方式通过组合方式调用通过类方法/静

C#控制台程序同步调用WebApi实现方式

《C#控制台程序同步调用WebApi实现方式》控制台程序作为Job时,需同步调用WebApi以确保获取返回结果后执行后续操作,否则会引发TaskCanceledException异常,同步处理可避免异... 目录同步调用WebApi方法Cls001类里面的写法总结控制台程序一般当作Job使用,有时候需要控制

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Python用Flask封装API及调用详解

《Python用Flask封装API及调用详解》本文介绍Flask的优势(轻量、灵活、易扩展),对比GET/POST表单/JSON请求方式,涵盖错误处理、开发建议及生产环境部署注意事项... 目录一、Flask的优势一、基础设置二、GET请求方式服务端代码客户端调用三、POST表单方式服务端代码客户端调用四