代码注册COM组件

C#实现com组件供pb9使用 在VS2022和PB9.1环境下实现COM组件时,需注意以管理员身份启动VS,否则无法勾选“为COM互操作注册”选项,导致编译失败。创建项目时应选择“.NET Framework”类库模板,并在项目属性中勾选“使程序集COM可见”,选择x86平台以确保与32位PB9兼容。代码实现时,需定义接口并使用Guid和ProgId属性标记类,以便其他语言调用。编译生成后,需通过GACUtil和RegAsm工具将DLL注册到全局缓存和注册表中。最后,在PB中通过OleObject调用COM组件,确保组件正确连接并执行功 阅读详情

在代码里注册COM组件,相对于regsvr32有自己的优点,可控,隐蔽性好。这里将msdn的示例修改了下:

需要注意的有两点:

  1. Ole环境的初始化和释放;
  2.    GetProcAddress中的函数名称,这里需要取得函数地址,所以函数名大小写...不能写成DllUnRegisterServer大笑


	HRESULT hr = OleInitialize(NULL);
<span style="white-space:pre">	</span><pre name="code" class="html"><span style="white-space:pre">	</span>int iError;
HINSTANCE hLib = LoadLibrary(_T("XXX.dll"));if (hLib < (HINSTANCE)HINSTANCE_ERROR){iError = GetlastError();

<span style="white-space:pre">		</span>return iError<span style="font-family: Arial, Helvetica, sans-serif;">;</span>
	}

	// 注册
	FARPROC lpDllEntryPoint = GetProcAddress(hLib,"DllRegisterServer");
	FARPROC lpDllEntryPoint = GetProcAddress(hLib,"DllUnregisterServer");

	if (lpDllEntryPoint != NULL)
		(*lpDllEntryPoint)();
	else
	<span style="font-family: Arial, Helvetica, sans-serif;">{</span><pre name="code" class="html">		iError = GetlastError();
<span>		</span>return iError<span style="font-family: Arial, Helvetica, sans-serif;">;</span>
	}
::FreeLibrary(hLib);OleUninitialize();



36、定制 .NET 组件的 COM 视图 本文介绍了如何定制.NET组件的COM视图,包括隐藏类型和成员对COM的可见性、修改注册表条目、选择自定义ProgID以及添加任意注册代码等内容。此外,还详细阐述了注册方法的调用规则以及注意事项,帮助开发者更好地实现.NET与COM的互操作性。 阅读详情

相关推荐

深入解析regsvr32命令行工具与COM组件注册实战代码

看完这么多,你应该明白了一个道理:regsvr32不只是一个命令,它是理解 Windows 组件机制的入口。无论是排查注册失败、分析 ActiveX 安全漏洞,还是设计企业级部署方案,都需要你对 COM 的底层运作有清晰认知。记住这几个关键词:🔑 GUID 是身份凭证📦 CLSID 映射物理路径⚖️ 引用计数决定生死🛡️ 数字签名保障安全🚀 自动化才是未来方向。

weixin_32661831的博客 913

MsChart控件在VC++中的使用

关于MsChart控件的注册: 32位系统之下 1. 将mschrt20.ocx放在windows/system32目录下。注意,这个文件名中的没有字母a, 即没有写chart中的字母a,就是这一细节让我多花了不少时间。 2. 使用命令regsvr32 MSCHRT20.OCX来注册。 64位系统下 1.确保w

u014023993的专栏 4854

WIN32 COM组件 的实现及注册

通过一个简单的组件实现两个接口,CoCreateInstance 调用 DLLGetClassObject返回相应的组件类厂 类厂调用CreateInstance创建组件 用DLLRegisterServer向注册表中加一个组件ID,前提是要对注册表中CLSID下的结构有一定的基础。

通过代码注册COM、DLL组件

  注册代码如下:  C++ Code  1234567891011121314151617181920212223242526272829303132333435363738   // //=================================================// //If returns    Zero, DLL successfully regi...

weixin_34348805的博客 504

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组件

VC++ COM组件开发相关实例

一 组件基础 1 软件开发的阶段 1.1 结构化编程 采用自顶向下的编程方式,划分模块 和功能的一种编程方式。 1.2 面向对象编程 采用对象的方式,将程序抽象成类, 模拟现实世界,采用继承、多态的方式 设计软件的一种编程方式。 1.3 面向组件编程 将功能和数据封装成二进制代码,采用 搭积木的方式实现软件的一种编程方式。 2 组件和优点 2.1 组件 - 实际是一些可以执行的二进 制程序,它可以给其他的应用程序、操 作系统或其他组件提供功能 2.2 优点 2.2.1 可以方便的提供软件定制机制 2.2.2 可以很灵活的提供功能 2.2.3 可以很方便的实现程序的分布式 开发。 3 组件的标准 - COM(Component Object Model ) 3.1 COM是一种编程规范,不论任何开发语言 要实现组件都必须按照这种规范来实现。 组件和开发语言无关。 这些编程规范定义了组件的操作、接口的 访问等等。 3.2 COM接口 COM接口是组件的核心,从一定程度上 讲"COM接口是组件的一切". COM接口给用户提供了访问组件的方式. 通过COM接口提供的函数,可以使用组件 的功能. 4 COM组件 4.1 COM组件-就是在Windows平台下, 封装在动态库(DLL)或者可执行文件(EXE) 中的一段代码,这些代码是按照COM的 规范实现. 4.2 COM组件的特点 4.2.1 动态链接 4.2.2 与编程语言无关 4.2.3 以二进制方式发布 二 COM接口 1 接口的理解 DLL的接口 - DLL导出的函数 类的接口 - 类的成员函数 COM接口 - 是一个包含了一组函数指针 的数据结构,这些函数是由组件实现的 2 C++的接口实现 2.1 C++实现接口的方式,使用抽象类 定义接口. 2.2 基于抽象类,派生出子类并实现 功能. 2.3 使用 interface 定义接口 interface ClassA { }; 目前VC中,interface其实就是struct 3 接口的动态导出 3.1 DLL的实现 3.1.1 接口的的定义 3.1.2 接口的实现 3.1.3 创建接口的函数 3.2 DLL的使用 3.2.1 加载DLL和获取创建接口的函数 3.2.2 创建接口 3.2.3 使用接口的函数 4 接口的生命期 4.1 问题 在DLL中使用new创建接口后,在用户 程序使用完该接口后,如果使用delete 直接删除,会出现内存异常. 每个模块有自己的内存堆(crtheap) EXE - crtheap DLL - crtheap new/delete/malloc/free默认情况 下都是从自己所在模块内存堆(crtheap) 中分配和施放内存.而各个模块的 这个内存堆是各自独立.所以在DLL中 使用new分配内存,不能在EXE中delete. 4.2 引用计数和AddRef/Release函数 引用计数 - 就是一个整数,作用是 表示接口的使用次数 AddRef - 增加引用计数 +1 Release - 减少引用计数 -1, 如果 当引用计数为0,接口被删除 4.3 使用 4.3.1 创建接口 4.3.2 调用AddRef,增加引用计数 4.3.3 使用接口 4.3.4 调用Release,减少引用计数 4.4 注意 4.4.1 在调用Release之后,接口指针 不能再使用 4.4.2 多线程情况下,接口引用计数 要使用原子锁的方式进行加减 5 接口的查询 5.1 每个接口都具有唯一标识 GUID 5.2 实现接口查询函数 QueryInterface 6 IUnknown 接口 6.1 IUnknown是微软定义的标准接口 我们实现所有接口就是继承这个接口 6.2 IUnknown定义了三个函数 QueryInterface 接口查询函数 AddRef 增加引用计数 Release 减少引用计数 7 接口定义语言 - IDL(Interface Definition Language ) 7.1 IDL和MIDL IDL - 定义接口的一种语言,与开发 语言无关. MIDL.EXE - 可以将IDL语言定义接口, 编译成C++语言的接口定义 7.2 IDL的基础 import "XXXX.idl" [ attribute ] interface A : interface_base { } 7.2.1 Import 导入,相当于C++的 #include 7.2.2 使用"[]"定义区域,属性描述 关键字 1) object - 后续是对象 2) uuid - 定义对象GUID 3) helpstring - 帮助信息 4) version - 版本 5) point_default - 后续对象 中指针的默认使用方式 比如: uniqune - 表示指针可以 为空,但是不能修改 7.2.3 对象定义 1) 父接口是IUnknown接口 2) 在对象内添加函数,函数定义必须 是返回 HRESULT. HRESULT是32位整数,返回函数是否 执行成功,需要使用 SUCCESSED和 FAILED宏来判断返回值.

C#通过代码注册COM组件

using System; using System.Diagnostics; using Microsoft.Win32; namespace ChuckLu.Utility { public class Cmd { private Cmd() { } private st...

weixin_30493321的博客 451

【R语言-生存分析之观察生存率计算】

全人群肿瘤登记资料常用的统计分析指标包括发病率、死亡率、现患率以及生存率等,其中肿瘤生存率是评估肿瘤治疗效果和肿瘤负担的必要指标,其计算涉及肿瘤患者的发病、 死亡和随访三个方面的资料, 数据整理和计算过程均较为复杂, 如何及时、 准确地计算肿瘤生存率, 并使其可以在不同地区、 不同人群、不同时期间被客观公正地比较和评价,仍然是统计学家们一直在研究的主题。

weixin_46579654的博客 5441

浅谈【C#】代码注册COM组件

在这个示例中,我们首先定义了一个COM接口 `IMyComInterface` 和一个实现了该接口的类 `MyComClass`。然后,我们使用 `RegisterTypeForComClients` 方法在 `Main` 方法中注册了 `MyComClass` 类作为COM组件。在C#中注册COM组件通常涉及到使用`regasm`工具或者在代码中使用`System.Runtime.InteropServices`命名空间下的`RegisterTypeForComClients`方法。

a876106354的博客 1553

一周涨十万星,GitHub 爆火的 REA 逆向工程到底是什么?

REA 这波热度里,我一直没太想明白的是它为什么火在 AI 圈而不是安全圈。同类的 MCP 工具早就在了,技术上也谈不上新,真正变的只有一件事:门槛。门槛一降,参与的人就从"会逆向的工程师"变成了"会打字的任何人"。这大概也是争议的根源。护城河这件事,多数报道的共识是它从"你看不到我的代码"挪到了"你拿不走我的服务能力和业务理解"。这话对不对,现在没人拿得出证据,只能等下一批真实案例。哪天有人拿 REA 把某个还在卖钱的闭源软件啃出可维护的工程,那个答案才算落地。

优快云zhizunbao的博客 1203

基于强化学习框架的交易策略学习过程

每个状态s∈S 是一个由六个微观结构特征构成的向量,这些特征反映了当前市场的订单簿状态和近期交易行为。

xu624735206的博客 1112

com技术组件第7章,用vs2005编译示例代码,com注册不成功。

com第7章,编译问题,解决方案

u011733280的专栏 764

电动转向系统 TAS 传感器

靠扭杆变形测力气,用霍尔效应算角度,借 ECU 给电机发指令。它就像 EPS 系统的 "神经末梢",把驾驶员的操作意图转化成电信号,再通过电机变成实实在在的助力,让我们开车既省力又安全。下次转动方向盘时,不妨想想这个藏在转向柱里的 "小传感器"—— 正是它的精准感知,才有了每一次顺畅的转向体验。

weixin_59825476的博客 4295

如何在wince下注册COM组件?

使用VS2005写了一个COM,在Wince下使用,给其他程序调用,所以我们需要先注册好。注册有两种方式:1 写好COM组建后,部署到目标平台,这样目标平台就可以使用了。  但是有一个问题,如果注册表项不可以保存的话,那不就麻烦了,所以最好的方法是比较下部署前后的差异,把比较后的不同的地方写在bib文件当中,这样在OS当中就有了,那不就可以用了?呵呵。 2 如果有些朋友的不能部

dadahacker的笔记 3686

解决OpenCASCADE性能瓶颈:显示加速与三角剖分优化全攻略

本文深入探讨OpenCASCADE在工业设计和CAD建模中的性能优化策略,重点解决显示加速与三角剖分等核心瓶颈问题。通过智能刷新控制、显示数据结构优化和动态LOD技术,显著提升渲染效率和交互体验,适用于复杂场景下的三维可视化应用。

weixin_30752699的博客 344

SillyTavern 向量存储配置踩坑记:从卡死到本地部署 Ollama 跑通

用此命令看到镜像就算成功。

qq_62483451的博客 1263

VS2022创建COM组件并且调用(1)

VS项目地址::https://download.youkuaiyun.com/download/litterCooker/89709579。6.进入类视图,用VS自带的功能给刚刚新建的类添加方法和属性。4、运行结果如下表示成功了。

litterCooker的博客 1863

Allegro174版本如何关闭模块复用后铜皮自动从动态变成静态操作指导

在用Allegro进行PCB设计的时候,模块复用是使用的十分频繁的操作,当Allegro升级到了174 S034版本的时候,当使用模块复用的功能的时候,模块内的铜皮会自动动静转换,大部分情况是不需要的。版本如何关闭模块复用后铜皮自动从动态变成静态操作指导。如何关闭这个功能,具体操作如下。

weixin_54787054的博客 1261

易邮服务器com组件注册失败,com组件注册失败有什么办法可以解决

COM组件实际上是系统内一些比较小的二进制可执行程序,它们能为应用程序,操作系统以及其他组件提供一定的服务。所以注册COM组件是一个重要的事情,但这同时也是win7系统的一个硬伤,win7系统注册COM组件总是失败,让人烦心。解决办法:运行:regsvr32xxx.ocx提示:模块"xxx.ocx"已加载,但对调用dllregisterserver的调用失败,错误代码0x80004005。问题分析...

weixin_36256917的博客 999

宇瞳杯安防镜头设计

宇瞳杯安防镜头设计

weixin_72050316的博客 1517

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

regsvr32 命令注册COM组件报错"模块已加载,但是对DLL的调用失败,错误代码0x80004005"

COM组件的注册命令, 打开运行输入命令: regsvr32 E:\xz_ssybjk.dll 出现提示 将命令在CMD窗口中前后加上 双引号,如下图命令: regsvr32 "E:\xz_ssybjk.dll" 就可以了

liubing5188的博客 1万+

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

用C#寫COM組件

步驟一:建立“windows控制項程式庫”工程,如圖: jiangligongcheng.bmp 步驟二:在我們這個例子中用不到帶界面的com控件所以我們將界面的size屬性設置為 0, 0我們要用C#寫COM組件必須要實現  public interface IObjectSafety接口因為這是。IObjectSafety接口,把ActiveX控件标记为安全的ActiveX控件。每個接口需要一

jxufewbt的专栏 2227

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

C# WinForm怎么使用COM组件

用Visual Studio的自动代码补全功能,然后这里显示两个方法,每个都试试,然后就知道是谁了。然后在 引用管理器 的 COM 分页下选择自己要添加的COM组件,当然前提是你已经用。命令注册过了此COM组件到注册表,如果还没有注册在这个列表里是看不到的。当然每个COM组件的这个对外的接口函数名都不一样,怎么确定。首先在右边自己的项目上右键→添加→引用。这个点后头怎么写呢?

l198738655的博客 813
上一篇: Eng_名词
下一篇: 虚拟机快速调试Android
DayCodeDay
博客等级 码龄14年 0粉丝 5原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值