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组件开发流程总结的更多相关文章

  1. Vue.js的复用组件开发流程

    本文由蔡述雄发表 接下来我们会详细分析下如何完成由多个组件组成一个复用组件的开发流程. 下面先看看我们的需求 列表组件quiList.vue 本节我们主要要完成这样一个列表功能,每一行的列表是一个组件 ...

  2. js组件开发流程

    html代码 <div id="div1"></div> <div id="div2"></div> <d ...

  3. 饿了么基于Vue2.0的通用组件开发之路(分享会记录)

    Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...

  4. 基于GBT28181:SIP协议组件开发-----------第三篇SIP注册流程分析实现

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3941172.html,qq:1269122125. 上两章节简要的 ...

  5. 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...

  6. 15分钟快速开发一个kissy组件(流程篇)

    Step1: 安装kissy gallery组件工具 npm install yo grunt-cli -g npm install generator-kissy-gallery -g 请确保本地带 ...

  7. C++的性能C#的产能?! - .Net Native 系列《二》:.NET Native开发流程详解

    之前一文<c++的性能, c#的产能?!鱼和熊掌可以兼得,.NET NATIVE初窥> 获得很多朋友支持和鼓励,也更让我坚定做这项技术的推广者,希望能让更多的朋友了解这项技术,于是先从官方 ...

  8. 【转】Yeoman:Web 应用开发流程与工具

    原文转自:http://blog.jobbole.com/62098/ 随着 Web 2.0 和 HTML 5 的流行,现在的 Web 应用所能提供的功能和交互能力比之前传统的 Web 应用要强大很多 ...

  9. javascript组件开发之基类继承实现

    上一篇文章大概的介绍了一下关于javascript组件的开发方式,这篇文章主要详细记一下基类的编写,这个基类主要是实现继承的功能 为什么要封装基类? 由于这次重构项目需要对各种组件进行封装,并且这些组 ...

随机推荐

  1. Ubuntu 15.10搭建IPSec L2TP服务器

    以下步骤完全使用于Ubuntu 14.04版本 首先安装以下所需包 sudo apt-get install openswan xl2tpd ppp lsof!注意!Ubuntu 15.10会提示无法 ...

  2. dojo grid 编辑问题

    今天dojo grid编辑小问题,找了半天才找到问题, 1.问题 2.原因 数据单元没有索引列->id 3.修改前代码 <!DOCTYPE HTML> <html lang=& ...

  3. Linux系统中配置jdk

    在Linux系统下安装jdk 1.到Oracle公司的官网里下载好jdk,网址 http://www.oracle.com/technetwork/java/javase/downloads/jdk8 ...

  4. codeforces Codeforces Round #380 (Div. 1, Rated, Based on Technocup 2017 - Elimination Round 2)// 二分的题目硬生生想出来ON的算法

    A. Road to Cinema 很明显满足二分性质的题目. 题意:某人在起点处,到终点的距离为s. 汽车租赁公司提供n中车型,每种车型有属性ci(租车费用),vi(油箱容量). 车子有两种前进方式 ...

  5. 关闭Win10自带的 Windows Defender

    1.按下Win+R,输入gpedit.msc 2.进入组策略,选择计算机配置>管理模板>Windows 组件>Windows Defender 3.双击"关闭 Window ...

  6. C# 对Access数据库操作的通用类

    (转载自博主Jerry很简单) //Access数据库-C# 操作类 代码using System;using System.Collections.Generic;using System.Linq ...

  7. 自定义刻度的SeekBar

    <com.imibaby.client.views.CustomSeekbar android:id="@+id/myCustomSeekBar" android:layou ...

  8. sql 将查询结果为多行一列合并为一行一列

    使用sql stuff函数 /*         stuff(param1, startIndex, length, param2)说明:将param1中自startIndex(SQL中都是从1开始, ...

  9. JS验证字符长度

    function getStrLength(str) { var cArr = str.match(/[^\x00-\xff]/ig); return str.length + (cArr == nu ...

  10. 如何在一个div标签里显示出另一个网页? <iframe src=" http://www.baidu.com " width="800px" height="200px" scrolling="no" frameborder="0"> </iframe>

    如何在一个div标签里显示出另一个网页? 用在div里用iframe,就像下面的代码 <iframe src=" http://www.baidu.com " width=& ...