一. 几个概念:

  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及其调用研究相关推荐

  1. windows内核开发笔记七:内核开发OVERLAPPED结构体详解

    windows内核开发笔记七:内核开发OVERLAPPED结构体详解 typedef struct _OVERLAPPED {   DWORD Internal;   DWORD InternalHi ...

  2. i.MX RT开发笔记-03 | i.MX RT1062地址空间映射及启动方式

    系列文章目录 i.MX RT开发笔记-01 | 初识 i.MX RT1062 跨界MCU i.MX RT开发笔记-02 | i.MX RT1062开发环境搭建(MDK芯片包.NXP SDK详解) 文章 ...

  3. Windows辅助开发笔记-辅助开发逻辑思路

    最近自己有一个小项目. 涉及好几个框架和好几门语言.当涉及windows程序时.完成某个功能要优先从以下几点入手 1.  首先考虑使用句柄以及后端发送消息能不能实现功能(最好是用这种解决分辨率的问题) ...

  4. i.MX RT开发笔记-02 | i.MX RT1062开发环境搭建(MDK芯片包、NXP SDK详解)

    文章目录 一.Keil MDK 开发工具 1. 下载安装Keil-MDK 2. MDK芯片包 二.MCUXpresso SDK 1. 下载SDK 2. SDK内容 2.1. boards 2.2. C ...

  5. i.MX RT开发笔记-01 | 初识 i.MX RT1062 跨界MCU

    文章目录 一.跨界处理器 二.i.MX RT 子系列概览 1. 命名规则 2. RT10XX系列 3. RT11XX系列 4. RT500和RT600系列 5. 安全性能对比 三.i.MX RT106 ...

  6. iOS开发笔记--OC工程中调用不了Swift代码

    今天在OC工程里面直接引入了一个第三方的Swift包,结果OC文件里面死活找不到Swift对象.打开 "工程名-swift.h"文件内容似乎是空的.(正常的文件应该会有很多OC方法 ...

  7. [记录][问题]Win32调用C++/WinRT DLL

    相关链接 https://docs.microsoft.com/en-us/windows/uwp/cpp-and-winrt-apis/intro-to-using-cpp-with-winrt#v ...

  8. Windows 下开发PHP扩展资源

    1.Windows 下开发PHP扩展 http://www.shinrun.com/htmls/100101-37.html 2.windows下开发PHP扩展dll(无需Cygwin) http:/ ...

  9. 如何渲染一个生物 - Minecraft 1.16 Forge Mod 开发笔记

    如何渲染一个生物 - Minecraft 1.16 Forge Mod 开发笔记 基本渲染框架 调用栈 渲染器 `EntityRenderer` 生物基础渲染器 `LivingRenderer` La ...

最新文章

  1. JS设计模式学习实例之单例模式
  2. 成功解决采用ax.bar进行三维绘图绘制柱状图的时候,横坐标只显示三列而不是数据中的四列
  3. Windows 全部调试符号包下载
  4. 对现有的所能找到的DDOS代码(攻击模块)做出一次分析----UDP篇
  5. 【iOS开发每日小笔记(一)】UIPickerView 自动选择某个component的某个row
  6. python操作windows库_python大佬养成计划----win下对数据库的操作
  7. 一文带你入门目前大热的图神经网络
  8. day08 文件操作
  9. dell mobile connect 兑换码_剑与远征万圣节兑换码是什么?剑与远征2020万圣节兑换码使用解析...
  10. 使用win10 hyper-v安装linux系统
  11. JAVA-数据类型、变量、常量
  12. 详解:Hive的存储格式与对比
  13. linux清指令,Linux隐匿和清除的几条命令
  14. groovy教程入门
  15. 【PS】抠图教程(0基础快速入门)
  16. 关于Ubuntu循环登陆界面
  17. 邮箱格式怎么填写才正确?Tom邮箱格式怎么写?邮箱的正确填写?
  18. 布同:使用ghost备份或者还原的往事
  19. CentOS7上软RAID的实现
  20. html怎么所有按钮没效果图,点击按钮没反应?所有按钮都没反应

热门文章

  1. 钉钉群机器人消息通知
  2. 冰岛的数据中心产业蓝图
  3. 补充小程序的一些观点,以及你可能还不知道的事(内附最全小程序名单、小程序商店)...
  4. 开源中国源码学习(一)——简介
  5. 电子邮件营销初学者指南(二):如何开始与撰写
  6. 字符串加密后md5为 0exxxx 的字符串
  7. ccf-csp 2015春季真题题解
  8. matlab如何查看眼图q值,详解:什么是眼图、眼图怎么看?
  9. 360图片搜索API
  10. OpenNI 官网将于4月23日 关闭