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组件的开发方式,这篇文章主要详细记一下基类的编写,这个基类主要是实现继承的功能 为什么要封装基类? 由于这次重构项目需要对各种组件进行封装,并且这些组 ...
随机推荐
- expect使用demo
#!/usr/bin/expect set timeout set ip [lindex $argv ] spawn ssh root@$ip expect { "yes/no" ...
- 安装YouCompleteMe
1. from software center 1 $ apt-get install vim vim-youcompleteme vim-addon-manager 2 $ vam install ...
- Activity之间传递参数(四)
--------siwuxie095 获取Activity的返回参数 1.首先修改两个布局文件,都修改为 LinearLayout 布局, 添加orientation属性为:vertical. (1) ...
- oracle分页查询sql
select * from( select shopid,rownum rn from p_shopinfo where is_hot=1 and rownum <=6 order by sho ...
- 【译】RabbitMQ:发布-订阅(Publish/Subscribe)
在前一篇教程中,我们创建了一个工作队列,我们假设在工作队列后的每一个任务都只被调度给一个消费者.在这一部分,我们将做一些完全不一样的事情,调度同一条消息给多个消费者,也就是有名的“发布-订阅”模式.为 ...
- spark2.0配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- 接入百度语音SDK的步骤
1.导入依赖库 SystemConfiguration.framework AudioToolbox.framework UIkit.framework AVFoundation.framework ...
- PHP移动文件指针ftell()、fseek()、rewind()总结
在对文件进行读写过程中,有时需要在文件中跳转.同不同位置读取,以及将数据写入到不同的位置.例如,使用文件模拟数据库保存数据,就需要移动文件指针.指针的位置是以从文件头开始的字节数度量的,默认以不同模式 ...
- 利用node构建本地服务
利用node构建本地服务 首先安装下node.js,地址为https://nodejs.org/en/,然后安装npm. node.js的中文api地址http://nodeapi.ucdok.com ...
- postgresql数据迁移
postgresql从库故障准备新库 1,创建用户[root@localhost home]# userdel postgres[root@localhost home]# groupdel post ...