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. [Docker] docker 基础学习笔记5(共6篇)

    docker 配置文件的位置: centos : /etc/sysconfig/docker ubuntu: /etc/default/docker   现在比如我自己电脑上已经装好了docker,但 ...

  2. jquery实现淡入淡出

    fade方法包括四个: (1)fadeIn(speed,callback):淡入的方法,speed代表淡入的速度,可以是slow,fast,毫秒,不填等 例如: $(document).ready(f ...

  3. mmap和shm共享内存的区别和联系

    共享内存的创建 根据理论: 1. 共享内存允许两个或多个进程共享一给定的存储区,因为数据不需要来回复制,所以是最快的一种进程间通信机制.共享内存可以通过mmap()映射普通文件(特殊情况下还可以采用匿 ...

  4. 第三方登录 QQ 错误码100044(提示 该应用非官方正版应用)

    当你碰到这个问题的时候,不要着急,你的功能已经走通了,代码没有问题. 100044 原因: 1.首先确定你的包名和签名,跟申请第三方平台的是一个.(真心吐槽一下,接盘侠不好当,尤其是没有交接的) 2. ...

  5. 什么是遗传方差(Genetic variance)、加性遗传方差(Additive genetic variance)、显性遗传方差(Dominance genetic variance)、上位遗传方差(Epistatic genetic variance)

    遗传方差:遗传方差又称表型方差(phenotypic variance),通常结合基因型方差(genotype variance)和环境方差(environmental variance).遗传方差主 ...

  6. clob型不能用 distinct,以及转换clob类型方法

    举例clob型不能用 distinct public List<WorkingPaper> findAssignedWorkPapers(String projectId, String ...

  7. JavaWeb技术(二):DAO设计模式

    1. DAO全称:Data Access Object , 数据访问对象.使用DAO设计模式来封装数据持久化层的所有操作(CRUD),使得数据访问逻辑和业务逻辑分离,实现解耦的目的. 2. 典型的DA ...

  8. python splinter

    from splinter.browser import Browser with Browser() as b: for url,name in web: b.visit(url) b.fill(' ...

  9. 随机生成数字(ashx文件,调用上篇所写发送邮件代码)

    public void ProcessRequest(HttpContext context) { //邮件标题 string Email_Title = Dsis.Core.SysCore.PubF ...

  10. Linux基本权限学习

    概念 权限就是用户对资源所能进行的操作 -- 这里涉及到三个重要的概念:用户.资源.操作. 首先,Linux中用户分为:u.g.o,就是用户.用户组.其他用户.--这里的用户是指拥有者!!!务必记住! ...