C# COM 组件在.NET 平台上的编程介绍
.NET学习资料
.NET学习资料
.NET学习资料
一、COM 组件简介
COM(Component Object Model)即组件对象模型,是一种微软提出的软件组件技术,它允许不同的软件模块在二进制层面进行交互。COM 组件可以用多种编程语言开发,如 C++、VB 等。COM 组件通过接口来提供功能,这些接口具有严格定义的方法、属性和事件。
二、C# 与 COM 组件交互的背景
在.NET 平台中,C# 语言非常强大且应用广泛。但在很多实际项目中,可能会遇到需要与旧有的 COM 组件交互的情况。例如,某些专业的办公软件插件、一些工业自动化设备的控制组件等可能都是基于 COM 技术开发的。C# 要使用这些 COM 组件的功能,就需要掌握在.NET 平台上与 COM 组件编程的方法。
三、在.NET 平台上使用 C# 调用 COM 组件的步骤
添加 COM 引用:在 Visual Studio 中,右键点击项目,选择 “添加”->“引用”,在弹出的窗口中选择 “COM” 选项卡,从列表中找到需要引用的 COM 组件,点击 “确定” 即可。例如,如果要使用 Microsoft Office 的 COM 组件来操作 Word 文档,就需要添加 “Microsoft Word XX.0 Object Library” 引用(XX 代表版本号)。
实例化 COM 对象:添加引用后,在代码中就可以使用 COM 组件提供的类型。例如,要创建一个 Word 应用程序对象,可以这样写:
using Word = Microsoft.Office.Interop.Word;
class Program
{static void Main(){Word.Application wordApp = new Word.Application();}
}
使用 COM 组件的功能:通过实例化的对象,可以调用 COM 组件的属性和方法。例如,打开一个 Word 文档:
Word.Document doc = wordApp.Documents.Open("C:\\example.docx");
释放 COM 资源:由于 COM 组件是基于非托管代码的,使用完后需要手动释放资源,避免内存泄漏。可以使用 System.Runtime.InteropServices.Marshal.ReleaseComObject 方法来释放 COM 对象。
Marshal.ReleaseComObject(doc);
doc = null;
Marshal.ReleaseComObject(wordApp);
wordApp = null;
四、C# 开发 COM 组件(可选)
在某些情况下,也可能需要用 C# 开发 COM 组件供其他程序使用。步骤如下:
创建项目:在 Visual Studio 中创建一个类库项目。
设置项目属性:在项目属性中,勾选 “为 COM 互操作注册”,并且设置 “AssemblyName” 和 “DefaultNamespace” 等属性。
编写代码:定义一个类,并且标记该类为 ComVisible (true),同时为类中的方法等定义 GUID。例如:
using System;
using System.Runtime.InteropServices;[ComVisible(true)]
[Guid("12345678-1234-1234-1234-123456789012")]
public class MyComComponent
{public string GetMessage(){return "Hello from C# COM Component!";}
}
生成并注册:生成项目后,会在项目输出目录中生成一个.tlb 文件,这就是 COM 组件的类型库文件。可以使用 regasm 工具注册该 COM 组件,让其他程序可以使用。
五、注意事项
版本兼容性:COM 组件和 C# 程序的版本可能存在兼容性问题,尤其是在不同操作系统和不同版本的 COM 组件之间。
错误处理:在调用 COM 组件方法时,要做好错误处理。因为 COM 组件返回的错误信息可能和.NET 异常处理机制不同,需要进行适当的转换和处理。
性能问题:由于 COM 和.NET 之间存在互操作的开销,在频繁调用 COM 组件方法时,可能会对性能产生一定影响,需要注意优化。
总之,C# 在.NET 平台上与 COM 组件的编程,无论是调用已有 COM 组件还是开发新的 COM 组件,都为我们在实际项目中整合不同技术和资源提供了强大的能力。通过合理的使用和注意相关事项,可以高效地完成基于 COM 组件的开发任务。
相关文章:

C# COM 组件在.NET 平台上的编程介绍
.NET学习资料 .NET学习资料 .NET学习资料 一、COM 组件简介 COM(Component Object Model)即组件对象模型,是一种微软提出的软件组件技术,它允许不同的软件模块在二进制层面进行交互。COM 组件可以用多种编程语言开发࿰…...

火热的大模型: AIGC架构解析
文章目录 一、背景介绍二、架构描述数据层模型层(MaaS)服务层(PaaS)基础设施层(IaaS)应用层 三、架构分析四、应用场景与价值4.1 典型场景4.2 价值体现 五、总结 一、背景介绍 火热的大模型,每…...

Android LifecycleOwner 闪退,java 继承、多态特性!
1. 闪退 同意隐私政策后,启动进入游戏 Activity 闪退 getLifecycle NullPointerException 空指针异常 FATAL EXCEPTION: main Process: com.primer.aa.gg, PID: 15722 java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.primer.aa.…...

PHP 完整表单实例
PHP 完整表单实例 引言 表单是网站与用户交互的重要方式,尤其是在收集用户输入数据时。PHP 作为一种流行的服务器端脚本语言,在处理表单数据方面具有强大的功能。本文将提供一个完整的 PHP 表单实例,涵盖表单创建、数据收集、验证和存储等关…...

深度学习学习笔记(32周)
目录 摘要 abstract 1 Mask R-CNN 2 RoI Align 2.1 RoIPool实验 2.2 RoIAlign实验 3 Mask Branch(FCN) 4 其他细节 4.1 Mask R-CNN损失 4.2 Mask分支损失 4.3 Mask Branch预测使用 摘要 Mask R-CNN是2017年发表的文章,一作是何恺明大神,没错就…...

Web3 开发者的机遇与挑战:技术趋势与职业发展
随着 Web3 技术的迅速发展,互联网的未来正朝着去中心化、用户主权、隐私保护等方向演进。作为 Web3 生态的核心力量,Web3 开发者在推动这一变革中扮演着至关重要的角色。无论是在区块链技术、智能合约开发、去中心化应用(DApp)的构…...

探索robots.txt:网站管理者的搜索引擎指南
在数字时代,网站如同企业的在线名片,其内容和结构对搜索引擎的可见性至关重要。而在这背后,有一个默默工作的文件——robots.txt,它扮演着搜索引擎与网站之间沟通桥梁的角色。本文将深入探讨robots.txt的功能、编写方法及其在现代…...

LM Studio本地调用模型的方法
首先需要下载LM Studio,(LM Studio - Discover, download, and run local LLMs)安装好后,需要对index.js文件进行修改,主要是对相关源hugging face的地址修改。 以macOS为例: cd /Applications/LM\ Studi…...

防火墙安全综合实验
防火墙安全综合实验 一、拓扑信息 二、需求及配置 实验步骤 需求一:根据下表,完成相关配置 设备接口VLAN接口类型SW2GE0/0/2VLAN 10AccessGE0/0/3VLAN 20AccessGE0/0/1VLAN List:10 20Trunk 1、创建vlan10和vlan20 2、将接口划分到对应…...

uniapp 编译生成鸿蒙正式app步骤
1,在最新版本DevEco-Studio工具新建一个空项目并生成p12和csr文件(构建-生成私钥和证书请求文件) 2,华为开发者平台 根据上面生成的csr文件新增cer和p7b文件,分发布和测试 3,在最新版本DevEco-Studio工具 文…...

【进程与线程】如何编写一个守护进程
如何编写一个守护进程。我们首先需要理解守护进程是什么。守护进程是在后台运行的进程,通常没有控制终端,用于执行系统任务,比如服务器或者定时任务。 用户可能想创建一个长期运行的服务,比如Web服务器或者日志监控程序。 首先&a…...

ubuntu安装VMware报错/dev/vmmon加载失败
ubuntu安装VMware报错/dev/vmmon加载失败,解决步骤如下: step1:为vmmon和vmnet组件生成密钥对 openssl req -new -x509 -newkey rsa:2048 -keyout VMW.priv -outform DER -out VMW.der -nodes -days 36500 -subj "/CNVMware/"ste…...

web前端布局--使用element中的Container布局容器
前端页面,跟Qt中一样,都是有布局设置的。 先布局,然后再在各布局中添加显示的内容。 Element网站布局容器:https://element.eleme.cn/#/zh-CN/componet/container 1.将element相应的布局容器代码layout,粘贴到vue项…...

手写一个C++ Android Binder服务及源码分析
手写一个C Android Binder服务及源码分析 前言一、 基于C语言编写Android Binder跨进程通信Demo总结及改进二、C语言编写自己的Binder服务Demo1. binder服务demo功能介绍2. binder服务demo代码结构图3. binder服务demo代码实现3.1 IHelloService.h代码实现3.2 BnHelloService.c…...

git rebase发生冲突时 ☞ 解决冲突
参考:特性分支 Rebase 主干分支...

【通俗易懂说模型】反向传播(附多元分类与Softmax函数)
🌈 个人主页:十二月的猫-CSDN博客 🔥 系列专栏: 🏀深度学习_十二月的猫的博客-CSDN博客 💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 目录 1. 前言 2. …...

SQL Server查询计划操作符(7.3)——查询计划相关操作符(6)
7.3. 查询计划相关操作符 48)Key Lookup:该操作符对一个有簇索引的表进行书签查找。参数列包含簇索引的名字和用于查找簇索引中数据行的簇键。该操作符总是伴随一个Nested Loops操作符。如果其参数列中出现WITH PREFETCH子句,则查询处理器已决定使用异步预取(预读,read-ah…...

计算机视觉的研究方向、发展历程、发展前景介绍
以下将分别从图像分类、目标检测、语义分割、图像分割(此处应主要指实例分割)四个方面,为你介绍研究生人工智能计算机视觉领域的应用方向、发展历程以及发展前景。 文章目录 1.图像分类应用方向发展历程发展前景 2.目标检测应用方向发展历程…...

反转字符串-双指针法,
在 Java 中,使用 双指针法 反转字符串是一种高效且直观的方法。以下是详细的解析和代码实现。 1. 双指针法的核心思想 使用两个指针:一个指向字符串的起始位置(left),另一个指向字符串的末尾位置(right&…...

亚博microros小车-原生ubuntu支持系列 27、手掌控制小车运动
背景知识 本节跟上一个测试类似:亚博microros小车-原生ubuntu支持系列:26手势控制小车基础运动-CSDN博客 都是基于MediaPipe hands做手掌、手指识别的。 为了方便理解,在贴一下手指关键点分布。手掌位置就是靠第9点来识别的。 2、程序说明…...

STM32 HAL库 CANbus通讯(C语言)
#include "main.h" #include "stm32f1xx_hal.h"CAN_HandleTypeDef hcan; CAN_TxHeaderTypeDef TxHeader; CAN_RxHeaderTypeDef RxHeader; uint8_t TxData[8]; uint8_t RxData[8]; uint32_t TxMailbox;void CAN_Init(void) {// 使能CAN时钟__HAL_RCC_CAN1_C…...

ML.NET库学习005:基于机器学习的客户细分实现与解析
文章目录 ML.NET库学习005:基于机器学习的客户细分实现与解析项目主要目的和原理目的原理 项目概述实现的主要功能主要流程步骤使用的主要函数方法关键技术 主要功能和步骤功能详细解读详细步骤解析 数据集及其处理步骤数据集处理步骤关键处理步骤原理1. 数据清洗与…...

(2/100)每日小游戏平台系列
新增一个猜单词小游戏! ------------------------------------------------------------------------------------------------------------------ 猜单词游戏玩法 游戏规则: 游戏会从一个预设的单词列表中随机选择一个单词。玩家有 6 次机会来猜测单…...

【Linux Oracle】杂货铺 日常实用2024
1.跨服务器移动文件 passwd=^T^bxxxx `/usr/bin/expect <<-EOF set timeout -1 spawn scp -r ${BATCH_TIME} sxnhtc@192.168.3.x:${EXP_MCRO_DIR}/ expect "*password:" send "$passwd\r" interact expect eof EOF` curl -k -X GET https://192.16…...

浏览器的缓存方式几种
浏览器的缓存方式主要分为以下几种: 1. 强制缓存(强缓存 / Memory Cache & Disk Cache) 通过 Expires 或 Cache-Control 头部控制。在缓存有效期内,浏览器直接使用缓存,不发起请求。 关键HTTP头: Ex…...

黑马React保姆级(PPT+笔记)
目录 一、react基础 1.进程 2、优势 3、市场 4、搭建脚手架 认识目录 核心依赖(右边两个react) 去除非必要 运行原理: 总结 5、JSX 本质 高频场景 注意编辑 渲染列表 总结 条件渲染 简单情况 复杂情况 事件绑定&#x…...

2025web寒假作业二
一、整体功能概述 该代码构建了一个简单的后台管理系统界面,主要包含左侧导航栏和右侧内容区域。左侧导航栏有 logo、管理员头像、导航菜单和安全退出按钮;右侧内容区域包括页头、用户信息管理内容(含搜索框和用户数据表格)以及页…...

三、OSG学习笔记-应用基础
前一章节:二、OSG学习笔记-入门开发-CSDN博客https://blog.csdn.net/weixin_36323170/article/details/145513874 一、 OsgGA: 界面事件处理空间,处理操作各种操作器的最大名字空间; GUIEventHandler: ui 事件操作类 注意:在启…...

CTFHub-RCE系列wp
目录标题 引言什么是RCE漏洞 eval执行文件包含文件包含php://input读取源代码远程包含 命令注入无过滤过滤cat过滤空格过滤目录分隔符过滤运算符综合过滤练习 引言 题目共有如下类型 什么是RCE漏洞 RCE漏洞,全称是Remote Code Execution漏洞,翻译成中文…...

Linux ping不通百度但浏览器可以打开百度的的解决方法
问题描述:使用ping命令ping www.baidu.com,提示的地址为ipv6地址,但该地址ping不通,但使用浏览器直接打开百度网址可以打开。 问题可能的原因:(1)虚拟机上ipv6为自动模式,影响了ipv4寻址&#…...