如何在C#中监听COM组件(非托管)中对象启动事件?

问题描述

如何在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脚本启动

时间: 2025-01-02 15:13:03

如何在C#中监听COM组件(非托管)中对象启动事件?的相关文章

java中监听接口里面的onclick方法为什么被称为回调方法

问题描述 java中监听接口里面的onclick方法为什么被称为回调方法 那普通接口有回调方法吗,普通类有回调方法吗, 回调方法是如何定义的 解决方案 你别被回调这个词搞蒙了,其实就是把方法当做参数而已 解决方案二: 因为onclick你定义了,不是自己调用,而是间接由按钮点击后系统类库去调用,所以叫回调. 英文叫做callback. 解决方案三: 回调方法简单的说就是a方法都用b方法,b方法执行过程中需要调用a方法,callback 解决方案四: [个人向]Android回调接口的实现方法ja

java-Java在一个A类中监听另一个B类里面一个整型变量值的变化

问题描述 Java在一个A类中监听另一个B类里面一个整型变量值的变化 B类中值一变化A就得到这个变化的值,我知道应该是用观察者模式来实现,但不知道具体的方法 解决方案 public class B{ private int a; private OnAUpdateListener onAUpdateListener; public void setOnAUpdateListener(OnAUpdateListener onAUpdateListener){ this.onAUpdateListe

在flex中监听鼠标右键事件,提示 TypeError Error 2007 参数type不能为空。

在flex中监听鼠标右键事件 ,报错,提示 缺少参数. TypeError: Error 2007: 参数 type 不能为空. at flash.events::EventDispatcher/addEventListener() at com.waylau.eagleos.components::DesktopExplorer/service_resultHandler()[D:\workspaceFB47\com.waylau.eagleos_0.9.5\src\com\waylau\ea

能不能在listview中监听插入删除的事件?

问题描述 能不能在listview中监听插入删除的事件? 能不能在listview中监听插入删除的事件?怎么在listview修改的时候发消息出去给主界面? 解决方案 ListView的监听事件ListView事件监听Listview监听事件的随笔.... 解决方案二: listview监听删除事件应该是监听适配器布局里面的某个控件吧,删除操作成功后,调用activity或者fragment请求数据的代码方法 重新给listview赋值就好了啊

android监听edittext-关于在Activity中监听 其它layout中的edittext

问题描述 关于在Activity中监听 其它layout中的edittext 在ActivityA中通过viewpage 加载了三个layout 然后直接在ActivityA中的oncreate方法中 初始化其它layout中的edittext 然后去edittext.addTextChangedListener 去监听的话会出空指针的错误 但是在加载的layout中加一个button 然后在这个点击方法中去初始化 然后edittext.addTextChangedListener就不会出错 有

java监听事件-java中为什么监听方法的方法参数没有对象,详细代码如下

问题描述 java中为什么监听方法的方法参数没有对象,详细代码如下 b.setOnClickListener.( new On ClickListnener( ) {方法体省略若干代码 } ); java中为什么监听方法的方法参数没有对象,详细代码如上 解决方案 b.setOnClickListener.( new On ClickListnener( ) {方法体省略若干代码 } ); Listener.这里多了一个点吧. 这里b.setOnClickListener需要一个对象,而new O

listview-android-怎么在一个ListView中监听点击事件?

问题描述 android-怎么在一个ListView中监听点击事件? 我现在有这个代码 ListView list = (ListView)findViewById(R.id.ListView01); ... list.setAdapter(adapter); 当我像下边这么做的时候 list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { public void onItemSelected(Adapte

javaweb-Extjs2.0.2中 监听file的change事件是怎么回事

问题描述 Extjs2.0.2中 监听file的change事件是怎么回事 var form = new Ext.form.FormPanel({ renderTo:'file', labelAlign: 'right', labelWidth: 60, frame:true, autoWidth: true, height:200, fileUpload: true, items: [{ xtype: 'textfield', fieldLabel: '文件名', listeners : {

在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法!

在Activity,Service,Window中监听Home键和返回键的一些思考,如何把事件传递出来的做法! 其实像按键的监听,我相信很多人都很熟练了,我肯定也不会说这些基础的东西,所以,前期,还是一笔带过一下,我们重点说下后半部分吧 一.Activity监听返回键 这个其实大家都知道,首先我们要了解流程,你要屏蔽这个返回键,那你就要拿到这个返回键的事件了,所以我们要监听了,而在Activity中,有两种做法,首先,系统是提供了返回键的监听的 /** * 返回键监听 */ @Override