问题描述
- 如何在C#中监听COM组件(非托管)中对象启动事件?
-
诸位前辈,晚上好:我是一名硬件工程师,最近使用原理图绘图工具时发现有些功能不好用,就准备自己开发插件增强一下,其中遇到了这样一个问题:
我在 C# 项目中加入 COM 组件的引用,原理图程序的 COM 对象是 ViewDraw,在其启动时,会创建一个 ViewDraw.Application 的对象,这个对象中有一些子成员和方法,以及一些事件。我现在通过以下方法已经可以做到此原理图程序启动后获取此活动对象:
ViewDraw.Application app = (ViewDraw.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("ViewDraw.Application");
并且可以通过此 app 对象注册一干事件等达到我想要的目的,但这种方法要求此原理图程序必须先于我的 .NET 程序运行才行,否则就因为创建不了对象而进入引用异常。
因为我对 COM 模型不熟悉,且也是个半酱油的程序选手,搜索尝试了一些方法,并未成功;想请教诸位前辈,如何能够让我的程序先启动时候,监视这个 COM 对象的创建,比如注册个事件,当其创建时触发此事件。
后辈在此拜谢。
解决方案
你说的这个不是com而是进程外的com
http://stackoverflow.com/questions/25299133/get-com-dcom-connections
解决方案二:
你的程序可以直接CoCreateInstance创建com对象实例。如果对应com进程不存在,系统会帮你启动。如果启动了,就会创建对象成功。
解决方案三:
补充说明一下,此对象 ViewDraw.Application 自带了 Startup 事件,但是我没绕过这个弯:
我注册这个事件,必须先要有一个 ViewDraw.Application 对象,而有了这个对象,我还要 Startup 方法干什么……
解决方案四:
进程外的com,那直接写代码。和C#没什么大关系。
解决方案五:
写一段powershell脚本启动