COM组件的使用方法

使用Node.js实现COM组件编程 在实现COM组件之前,我们需要编写COM组件的逻辑并将其编译为动态链接库(DLL文件)。模块来加载COM组件的动态链接库,并与其进行交互。虽然COM组件编程涉及到更多的细节和复杂性,但通过本文的指导,你可以开始使用Node.js来进行COM组件编程,并进一步探索更多相关的主题和技术。需要注意的是,COM组件编程涉及到更多的细节和复杂性,如注册COM组件、处理接口和类型库等。然后,我们定义了COM组件的接口,指定了要调用的方法的名称和参数类型。这将加载COM组件的动态链接库,并调用COM组件的方法。 阅读详情

Requirement:
1.创建myCom.dll,该COM只有一个组件,两个接口IGetRes--方法Hello(),
  IGetResEx--方法HelloEx()
2.在工程中导入组件或类型库
  #import "组件所在目录/myCom.dll" no_namespace
       或
  #import "类型库所在目录/myCom.tlb"
  using namespace MYCOM;

--Method 1-------------------------------------------------------
  CoInitialize(NULL);
  CLSID clsid;
  CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
  CComPtr<IGetRes> pGetRes;//智能指针
  pGetRes.CoCreateInstance(clsid);
  pGetRes->Hello();
  pGetRes.Release();//小心哦!!请看最后的“注意”
  CoUninitialize();
--Method 2---------------------------------------------------------
  CoInitialize(NULL);
  CLSID clsid;
  HRESULT hr=CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
  IGetRes *ptr;
  hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,
                __uuidof(IGetRes),(LPVOID*)&ptr);
  ptr->Hello();
  CoUninitialize();
--Method 3--------------------------------------------------------
  CoInitialize(NULL);
  HRESULT hr;
  CLSID clsid;
  hr=CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
  IGetRes* ptr;
  IGetResEx* ptrEx;

  //使用CoCreateClassObject创建一个组件(特别是mutilThreads)的多个对象的
    时候,效率更高.
  IClassFactory* p_classfactory;
  hr=CoGetClassObject(clsid,CLSCTX_INPROC_SERVER,
                      NULL,IID_IClassFactory, 
                      (LPVOID*)&p_classfactory);
  p_classfactory->CreateInstance(NULL,__uuidof(IGetRes),
                                         (LPVOID*)&ptr);
  p_classfactory->CreateInstance(NULL,__uuidof(IGetResEx),
                                         (LPVOID*)&ptrEx);
  ptr->Hello();
  ptrEx->HelloEx();
  CoUninitialize();
--Method 4--------------------------------------------------------
   直接从dll中得到DllGetClassObject,接着生成类对象及类实例(这方法可以
使组件不用在注册表里注册,这是最原始的方法,但这样做没什么意义,至少失去了COM
对用户的透明性),不推荐使用.

 typedef HRESULT (__stdcall * pfnHello)(REFCLSID,REFIID,void**);
  pfnHello fnHello= NULL;
  HINSTANCE hdllInst = LoadLibrary("组件所在目录/myCom.dll");
  fnHello=(pfnHello)GetProcAddress(hdllInst,"DllGetClassObject");
  if (fnHello != 0)
  {
  IClassFactory* pcf = NULL;
  HRESULT hr=(fnHello)(CLSID_GetRes,IID_IClassFactory,(void**)&pcf);
  if (SUCCEEDED(hr) && (pcf != NULL))
  {
  IGetRes* pGetRes = NULL;
  hr = pcf->CreateInstance(NULL, IID_IFoo, (void**)&pGetRes);
  if (SUCCEEDED(hr)  && (pFoo != NULL))
  {
  pGetRes->Hello();
  pGetRes->Release();
  }
  pcf->Release();
  }
  } 
  FreeLibrary(hdllInst);
--Method 5-------------------------------------------------------
   通过ClassWizard利用类型库生成包装类,不过前提是com组件的接口必须是派
生自IDispatch,具体方法:
   调出添加类向导(.NET中),选择类型库中MFC类,打开,选择"文件",选择
"myCom.dll"或"myCom.tlb",接下来会出来该myCom中的所有接口,选择你想
生成的接口包装类后,向导会自动生成相应的.h文件.这样你就可以在你的MFC中
像使用普通类那样使用组件了.

  CoInitialize(NULL);
  CGetRes getRest;
  if (getRest.CreateDispatch("myCom.GetRes") != 0)
  {
  getRest.Hello();
  getRest.ReleaseDispatch();
  }
  CoUninitialize();
--注意--------------------------------------------------------------
    COM中的智能指针实际上是重载了->的类,目的是为了简化引用记数,几不需要程序
员显示的调用AddRef()和Release(),但是为什么我们在Method 1中
pGetRes.Release(),问题在与,我们的智能指针pGetRes生命周期的结束是在
CoUninitialize()之后,CoInitialize所开的套间在CoUninitialize()后已经被
关闭,而pGetRes此时发生析构,导致了程序的崩溃,解决这个问题的另一个方法是
  CoInitialize(NULL);
  CLSID clsid;
  CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
  {
  CComPtr<IGetRes> pGetRes;//智能指针
  pGetRes.CoCreateInstance(clsid);
  pGetRes->Hello();
  }
  CoUninitialize();
--------------------------------------------------------------------
以上就是COM的5中方法,当然具体怎么使用还是在于程序的环境,加以琢磨....



                                                        vigor
                                                      2004.11.5

COM组件编写和使用示例 代码原封不动摘自《COM技术内幕》,只不过从MAKEFILE转为vs2008实现。 vs2008包含两个工程:Com工程,创建Com组件; Client工程,使用Com组件 Client目录: 示例如何使用COM组件 Com目录: 示例如何创建COM组件 Debug目录: REGISTER.BAT 注册com组件 UnREGISTER.BAT 反注册Com组件 Client.exe示例如何使用Com组件 Cmpnt.dll手动编写的Com组件 立即下载

相关推荐

扫地机器人:从仿真到决策,一个完整SLAM导航系统的自研之路

本文详细记录了从零开始自研扫地机器人SLAM导航系统的全过程,涵盖ROS-Gazebo仿真系统搭建、地图预处理优化、全覆盖规划算法迭代等关键技术。通过三次算法升级,最终实现92%的清洁效率,并分享DWA调参、状态机设计等实战经验,为开发者提供从仿真到落地的完整解决方案。

weixin_29053695的博客 352

COM组件学习

com组件,使用及创建。

weixin_51304431的博客 7821

统计信号处理基础 习题解答1-1

1-1:在雷达习题中,双程延时时间的估计量具有PDF τ0~Nτ0,στ02,其中τ0是真值。假如要估计距离请提出一种估计量R,并求它的PDF。然后,确定标准偏差στ0,使得距离估计值的99%在真值的100m以内,对电磁波传播速度取c=3×108m/s。 解答: 问题1: 由于电磁波传播速度c,信号可观察的双程传播延时τ0和双程传播距离τ0满足关系: R=cτ02 因此可采用如下估计量: R=cτ02 问题2: 由于τ0满足正态分布,且: Eτ0=τ0 varτ0=στ02 那么: E

weixin_43270276的博客 2806

vs、c++环境下开发使用com组件

COM组件是一组接口的集合,由Win32动态链接库(DLL)或可执行文件(EXE)的形式发布的可执行二进制代码组成。com是独立于语言的组件体系结构,可以用C++、Java和VB等任意一种语言编写com对象。COM组件的优点有:通过接口对功能分类;功能扩充,只需添加接口就行;可轻松实现进程间调用、分布式调用;具有封装、继承、多态的面向对象特征。COM是规范,以该规范实现的DLL可视为COM组件。

baidu_16370559的博客 6853

别再手动写JSON了!用Node-RED OPC UA节点5分钟搞定楼宇温湿度数据采集

本文介绍了如何利用Node-RED和OPC UA节点快速实现楼宇温湿度数据的自动化采集与JSON格式转换。通过可视化工具Node-RED,开发者无需编写复杂代码,5分钟内即可完成从传感器到数据输出的全流程配置,大幅提升智慧楼宇和工业物联网项目的实施效率。

weixin_30368405的博客 431

汇付天下聚合支付自助接入全流程详解(附JAVA/非JAVA环境配置指南)

本文详细解析了汇付天下聚合支付的自助接入全流程,涵盖JAVA与非JAVA环境下的实战配置。从接入前准备、架构理解、密钥获取,到JAVA SDK集成、核心支付代码拆解,以及Node.js/Python等环境的裸接口对接、签名生成与异步通知处理,提供了完整的避坑指南和上线检查清单,帮助开发者高效、稳健地完成支付系统集成。

wdx01234567的博客 511

Windows核心技术--com组件实用入门教程

1.com 组件对象模型 com是微软组件对象模型的简称。由于com具有二进制代码共享的 特性,所以它具备了高可开发性,高度可维护性和高度的可移植性(跨开发语言),以至于在windows上面的诸多应用软件采用了com来做整体的架构。比如微软的DirectX等。com虽然流行于2000-2004年之间,由于它的普及面之广,应用软件种类之繁多再加上windows对其默认支持很好,开发出来的软件无需依赖其他的开发包,所以被很多软件公司采用至今,作为一个VC++程序员,是否系统掌握com的用法称为是否合格的重要的衡

qq_44623314的博客 4897

数据仓库建模的步骤-从需求分析到模型优化的全面指南

数据仓库建模是一个系统化的过程,旨在设计和构建一个高效、可扩展的数据存储和分析环境。它的目标是将来自不同源系统的数据整合到一个统一的、面向主题的、随时间变化的数据集合中,以支持企业的决策制定过程。数据仓库建模不仅仅是创建表格和定义关系,它更是一门艺术,需要平衡业务需求、技术限制和未来的可扩展性。提供快速的查询性能支持复杂的分析需求适应业务的变化和增长保持数据的一致性和准确性接下来,让我们深入探讨数据仓库建模的每个主要步骤。

一个8年大数据开发工程师的碎碎念 2099

刀与剑-C++ COM组件调用

com使用,comdll,com注册,com调用,com c++,com组件,com新手,c++ com

qq_31314583的博客 6331

196、NPU的编译器开发:教程与示例代码编写

NPU编译器开发实战指南 摘要:本文分享了NPU编译器开发中的核心挑战与实战经验,通过具体代码示例展示了关键实现技术: 指令生成:必须考虑硬件特性(如地址对齐)和芯片配置抽象化 图优化:重点处理常见冗余结构(Reshape合并、BN融合),并注意数值稳定性 算子拆分:采用分块计算策略适配有限SRAM,需特别注意边界条件处理 内存分配:基于张量使用频率的贪心算法优化SRAM使用效率 文中包含多个真实踩坑案例: DMA地址未对齐导致硬件错误 BN融合时的除零风险 tile边界处理不当引起的精度下降 这些经验为开

m0_50546716的博客 79

19、情境理论中的信息结构解析

本文系统解析了情境理论中的信息结构,从信息元(infon)的基本概念出发,深入探讨了关系结构与简单信息结构的构建方法,分析了标准信息结构所满足的一系列公理(如A1-A14),并阐述了角色、同一性、高阶信息、循环现象、参数适当性及信息元部分性等核心性质。通过具体示例和流程图展示了信息结构的构建过程,并对比了不同公理下的结构差异,最后讨论了该理论在与其他领域融合中的发展趋势及面临的挑战。

book8的博客 78

不注册直接使用COM组件的方法

不注册直接使用COM组件的方法

tangaowen的专栏 1万+

GEE:基于 Landsat 数据集生成(1986-2024)月度合成地表温度(LST)时间序列数据

优快云@_养乐多_本文将介绍使用 Landsat 时间序列计算(1986-2024)月度合成地表温度(LST)时间序列数据集的代码。

养乐多的博客 1711

使用注册COM 组件 方法

使用注册COM 组件 方法

tangaowen的专栏 4110

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

在javascript中使用com组件的方法

转载自:http://dhailin.blog.163.com/blog/static/230738322011128102043880/ 首先创建一个COM组件,插入一个双接口Itest,在此接口上实现以下三个方法: [cpp]view plaincopy STDMETHODIMPCtest::test(void)//无输入输出参数{//TO...

SurpassLi的专栏 52

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

在VC中使用COM组件的几种方法

随着Internet和Intranet应用的飞速发展,COM(Component Object Model,组件对象模型)以其巨大的潜力渗透到软件学科的各个领域。在Windows操 ...

aimang9690的博客 337

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

VC中使用com组件的另一种方法

VC中使用com组件的另一种方法(http://blog.csdn.net/wqf2)        我们知道在vc中最常用的是通过CoCreateInstance来创建com组件的实例,今天我们介绍另一种更为灵活的方法。        先看代码: HINSTANCE hComInstance = NULL; ICalc * pICalc = NULL;

2211

COM组件三个最基本的接口类 //VC6中使用COM库的三种方法

COM组件有三个最基本的接口类,分别是IUnknown、IClassFactory、IDispatch。   COM规范规定任何组件、任何接口都必须从IUnknown继承,IUnknown包含三个函数,分别是 QueryInterface、AddRef、Release。这三个函数是无比重要的,而且它们的排列顺序也是不可改变的。QueryInterface用于查询组件实现的其它接口,说白了也就是看看

zhoubl668的专栏:远帆,梦之帆! 4980

在JS中使用COM组件的方法

首先创建一个COM组件,插入一个双接口Itest,在此接口上实现以下三个方法: STDMETHODIMP Ctest::test(void) //无输入输出参数 { // TODO: 在此添加实现代码 MessageBox(NULL,L"test",L"test",MB_OK); return S_OK; } ...

weixin_38168728的博客 1112

COM组件使用方法

普通COM组件(如DLL)仅暴露方法/属性接口,而ActiveX控件(如OCX)需要可视化交互(如按钮、表格),需通过 ​​ 包装器实现宿主环境集成。项目中引入ActiveX控件流程如下。右键点击开始菜单 -> 选择 ​​ 或 ​​。

weixin_42309425的博客 607

组件的几种方法VC中使用COM

随着Internet和Intranet应用的飞速发展,COM(Component Object Model,组件对象模型)以其巨大的潜力渗透到软件学科的各个领域。在Windows操作平台下,众多以COM形式提供的组件模块,如DirectX多媒体软件包、OLE DB/ADO数据库组件系统等,极大地丰富了操作系统的功能。由于COM机制允许任意两组件之间相互通信而不必关心是在何种计算机上的何种操

greytree的专栏 1826
上一篇: 自定义类实现连接点
下一篇: 小程序-文件读写(TextFilter)
Vigorcsdn
博客等级 码龄23年 0粉丝 28原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值