winRT Com组件开发流程总结
winRT Com组件开发:
1.编辑idl文件,winRT COM的idl文件与win32的idl文件有差异,如下:
interface ItestWinRTClass;
runtimeclass testWinRTClass;
[uuid(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx), version(NTDDI_WIN8), exclusiveto(testWinRTClass)]
interface ItestWinRTClass : IInspectable
{
// Method
HRESULT SetChange(DWORD dwNewChange);
}
[version(NTDDI_WIN8), activatable(NTDDI_WIN8), marshaling_behavior(agile)]
runtimeclass testWinRTClass
{
[default]interface ItestWinRTClass;
}
2. 编辑.man文件,将注册信息写入.man文件。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassID\xxxxx
HKEY_CLASSES_ROOT\Interface\xxxxx
winRT COM中,主要起作用的是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsRuntime\ActivatableClassID\xxxxx这个注册表项,与传统win32的HKEY_CLASSES_ROOT\CLSID\xxxxx这个不同,在生成com对象时,主要搜索前一个注册表项,找到com的类和接口。
3.编写Module文件,将激活类的class factory写入module文件中。
4.编写xxx.h和xxx.cpp文件,实现类和接口。
// header file
class CtestWinRTClass: public RuntimeClass<ItestWinRTClass, FtmBase>
{
InspectableClass(RuntimeClass_xxx, PartialTrust);
public:
CtestWinRTClass();
IFACEMETHOD(SetChange)(DWORD dwNewChange) override;
private:
int m_test;
};
// source file
略
5.编译,生成xxx.h文件和xxx_i.c文件,给其他引用的类使用。
6.手动将注册表信息导入到target machine中。
7.将生成的.winmd文件拷贝到target machine中,.winmd文件是新的元数据,供运行时和编译阶段的引用使用,这是winRT的一个特色。
8.将生成的dll拷贝到target machine,即可运行。
9.测试,写一个UnitTest程序:
HRESULT hr;
ComPtr<ItestWinRTClass> ppiTest;
hr = ActivateInstance(StringReference(RuntimeClass_xxxx).Get(), ppiTest);
VERIFY_SUCCEEDED(hr, L"Windows::Foundation::ActivateInstance() xxx is activated");
hr = ppiTest->SetChange(100);
VERIFY_SUCCEEDED(hr, L"testWinRTClass->SetChange() calling is OK");
winRT Com组件开发流程总结的更多相关文章
- Vue.js的复用组件开发流程
本文由蔡述雄发表 接下来我们会详细分析下如何完成由多个组件组成一个复用组件的开发流程. 下面先看看我们的需求 列表组件quiList.vue 本节我们主要要完成这样一个列表功能,每一行的列表是一个组件 ...
- js组件开发流程
html代码 <div id="div1"></div> <div id="div2"></div> <d ...
- 饿了么基于Vue2.0的通用组件开发之路(分享会记录)
Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...
- 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3941172.html,qq:1269122125. 上两章节简要的 ...
- 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)
原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...
- 15分钟快速开发一个kissy组件(流程篇)
Step1: 安装kissy gallery组件工具 npm install yo grunt-cli -g npm install generator-kissy-gallery -g 请确保本地带 ...
- C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解
之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...
- 【转】Yeoman:Web 应用开发流程与工具
原文转自:http://blog.jobbole.com/62098/ 随着 Web 2.0 和 HTML 5 的流行,现在的 Web 应用所能提供的功能和交互能力比之前传统的 Web 应用要强大很多 ...
- javascript组件开发之基类继承实现
上一篇文章大概的介绍了一下关于javascript组件的开发方式,这篇文章主要详细记一下基类的编写,这个基类主要是实现继承的功能 为什么要封装基类? 由于这次重构项目需要对各种组件进行封装,并且这些组 ...
随机推荐
- 浅析敏感词过滤算法(C++)
为了提高查找效率,这里将敏感词用树形结构存储,每个节点有一个map成员,其映射关系为一个string对应一个TreeNode. STL::map是按照operator<比较判断元素是否相同,以及 ...
- WeakHashMap回收时机
import java.util.ArrayList; import java.util.List; import java.util.WeakHashMap; public class TestWe ...
- NodeJS搭建HTTPS服务器
[NodeJS搭建HTTPS服务器] http://cnodejs.org/topic/54745ac22804a0997d38b32d
- asp.net连接数据库
Asp.net web连接数据库步骤. 一. 新建一个web工程. 1.文件->添加->新建网站->asp.net web网站Winform窗体. 2.新建好的网站最下面有 ...
- 通过系统自带的内容提供器(ContentResolver)读取系统的通讯录,并设置点击事件
1.布局 主布局只有一个listview,用来显示电话簿的名字和手机号码 <?xml version="1.0" encoding="utf-8"?> ...
- Linux系统中配置jdk
在Linux系统下安装jdk 1.到Oracle公司的官网里下载好jdk,网址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8 ...
- Highchart URL
http://www.highcharts.com/stock/demo/flags-general http://www.codesec.net/view/217265.html http://js ...
- UiAutomator自动化测试框架介绍
UiAutomator自动化测试框架介绍 环境搭建 1 必要条件 1.1 JDK 1.2 SDK(API高于15) 1.3 Eclipse 2 ...
- nginx编译模块详解
–prefix= 指向安装目录–sbin-path 指向(执行)程序文件(nginx)–conf-path= 指向配置文件(nginx.conf)–error-log-path= 指向错误日志目录–p ...
- My97Datepicker 去掉 “不合法格式或超期范围”自动纠错限制
官网上,纠错有以下三种,如日期格式不对,或超期,则必须纠错过后,才能继续操作, 但有时,可能允许出错,需要把纠错功能去掉,则可以设置errDealMode = 3,这种模式是官网说没有的, 但能够去掉 ...