客户调用COM流程

参考:COM技术内幕

DllGetClassObject
https://msdn.microsoft.com/en-us/library/windows/desktop/ms680760.aspx  
If a call to the CoGetClassObject function finds the class object that is to be loaded in a DLL,
CoGetClassObject uses the DLL‘s exported DllGetClassObject function.

IClassFactory
https://msdn.microsoft.com/en-us/library/windows/desktop/ms694364.aspx
After calling the CoGetClassObject function to get an IClassFactory interface pointer to the class object,
call the CreateInstance method of this interface to create an object.

CoCreateInstance
https://msdn.microsoft.com/en-us/library/windows/desktop/ms686615.aspx
CoCreateInstance等价
{
    CoGetClassObject(rclsid, dwClsContext, NULL, IID_IClassFactory, &pCF);
    hresult = pCF->CreateInstance(pUnkOuter, riid, ppvObj
    pCF->Release();
}

CoGetClassObject: 将在注册表中查找指定的组件。找到之后,它将装载实现此组件的DLL。
    装载成功之后,它将调用在DLL服务器中实现的DllGetClassObject。
DllGetClassObject: 此函数的作用是创建响应的类场。
    查询IClassFactory接口,并将其返回给CoCreateInstance。
CoCreateInstance将使用此接口来调用IClassFactory::CreateInstance函数
IClassFactory::CreateInstance调用了new操作符来创建指定的组件,并查询组件的IX接口。

//客户调用COM流程:
CoCreateInstace(rclsid,NULL,dwClsContext,IID_IX,(void**)&pIX);    //IX* pIX
    |--> CoGetClassObject(rclsid, dwClsContext, NULL, IID_IClassFactory, &pCF)    //IClassFactory* pCF
        |--> DllGetClassObject(rclsid,IID_IClassFactory,&pCF)    
            |--> CFactory* pFactory = new CFactory();
            |--> pFactory->QueryInterface(IID_IClassFactory,&pCF);    //返回类场指针IClassFactory* pCF
    |--> pCF->CreateInstance(pUnkOuter, IID_IX, &pIX);    //IX* pIX 组件接口指针pIX
pIX->Fx();

注意:.def模块定义文件

LIBRARY    "ComComponent"

EXPORTS
    DllCanUnloadNow  PRIVATE
    DllGetClassObject   PRIVATE
    DllRegisterServer  PRIVATE
    DllUnregisterServer PRIVATE

时间: 2024-10-10 15:42:43

客户调用COM流程的相关文章

Java网络编程TCP程序,服务器和客户机交互流程以及基本操作步骤。

1.什么是网络编程 网络编程其实就是实现两个计算机的数据交换(交互). 可以通过直接或间接的通过网络协议与其他的计算机进行通讯.(HTTP协议,TCP/IP协议等) 2.Tcp网络编程的实现流程 主要分为服务器端(Server)和客户端(Client). 通过这个图我们其实就可以了解了实现服务器和客户机交互过程是怎么样的了. 实现这些原理最重要的是Socket类也叫做套接字.应用程序通常通过"套接字"向网络发出请求或者应答网络请求. 服务器端 1.首先创建ServerSocket对象并

客户管理系统 详细流程(不用三大框架)

客户管理系统的详细编写流程 一.系统设计 1.需求分析 (系统中包含哪些数据模型.数据模型存在怎样的关系 E-R图.UML(用例图)) 2.制作页面Demo (和真实系统效果一样,给客户确认需求) 3.技术选型(环境搭建) 软件建模工具:IBM RSA.Rational Rose.Jude(日本研发 纯java编写,小巧.在此次编写中使用) 技术选型:DHTML+JSP+Servlet+C3P0+DBUtils+MySQL(MVC模式,DAO模型)+Tomcat6+Windows 4.数据库设计

DNS解析原理(客户访问网站流程)

DNS( Domain Name System)是"域名系统"的英文缩写,是一种组织成域层次结构的计算机和网络服务命名系统,它用于TCP/IP网络,它所提供的服务是用来将主机名和域名转换为IP地址的工作.DNS就是这样的一位"翻译官",它的基本工作原理可用下图来表示.DNS域名称空间的组织方式: 基本流程:1.客户机通过浏览器访问网站:www.baidu.com此过程需要将域名映射为IP地址,首先调用解析函数将待转换的域名放在DNS请求中,以UDP的报文方式发给本地

小城需微信接口调用全部流程php

/* 小程序报名,生成订单 */ public function make_order(){ if(IS_POST){ $data['openid'] = I('POST.openid'); $data_total = I('POST.data_total'); $data['crsNo'] = 'W'.date('YmdHis',time()).'-'.randomkeys(2); $insertId = M('home_order','xxf_witkey_')->add($data); i

Samsung_tiny4412(笔记)-->字符设备驱动基本操作及调用流程

/*********************************************************************************** * * Samsung_tiny4412(笔记)-->字符设备驱动基本操作及调用流程 * * 声明: * 以下所有的shell命令都是在root权限下运行的; * * 2015-3-7 阴 深圳 尚观 Sbin 曾剑锋 *******************************************************

php编程语言中利用邮件发送接口调用流程

对于如何利用smtp类发送邮件的过程,对于很多技术初学者都是不太理解的,通常会在编程过程中遇到许多问题,有些甚至不太清楚接口的调用流程,那么对于这种情况话,下面就跟大家讲解一下关于php编程语言中如何利用邮件发送接口调用的流程.实现代码与注释如下:1.打开php.ini,找到extension=php_openssl.dll,将前面的分号去掉,重启服务器.若此配置已打开,跳过这一步.2.发送邮件代码$MailServer = "smtp.163.com"; //SMTP服务器(若不是1

tars framework 源码解读(三) servant部分章节。客户端部分。完整的tars调用流程详解

一般tars客户端使用方式: 我们用客户端进行tars rpc调用时候,一般如下面这样写: 方式一. //直连方式 TC_Endpoint ep; AdminFPrx pAdminPrx; //服务管理代理 string sAdminPrx = "[email protected]"+_serverObjectPtr->getLocalEndpoint().toString(); pAdminPrx = Application::getCommunicator()->str

大叔也说Xamarin~Android篇~调用远程API接口,发POST请求

Xamarin我们在上节已经教大家如何去部署它的环境了,今天来说一个实际的例子,使用android客户调用.net web api的一个接口,并发送POST请求,当服务端回到请求后做出响应,客户端android将响应的内容输出,并跳换到别一个Activity页面,在新视图上加载网页内容到webView控件上,整个流程结束! 一 在主页面上添加几个表单元素,账号,密码,登陆按钮,并在Activity类的OnCreate方法中为它们赋值,并添加按钮的click事件 protected overrid

C#调用WebService

1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册. XML:(Extensible Markup Language)扩展型可标记语言.面向短期的临时数据处理.面向万维网络,是Soap的基础. Soap:(Simple Object A