在C#中使用COM,现在有一个问题比较棘手:
我在C#中new了一个com实例的引用后,调用COM的方法进行初始化和反初始化调用,可以将COM对象释放掉。
现在我想重复使用com实例的引用,在第二次调用初始化后,开始使用,都没有问题。但是在调用反初始化的时候,不能将COM对象释放掉了。现在可以肯定是由于使用rcw的引发的。因为我用非托管的代码多次初始化和反初始化是不会出现这个问题的。如果使用下面的语句将COM计数清空,那么我就不能重用使用过的COM实例的引用了。
System.Runtime.InteropServices.Marshal.ReleaseComObject(object obj);如何才能让COM对象正常的对此初始化和反初始化?请高手帮忙看看。谢谢了!
我在C#中new了一个com实例的引用后,调用COM的方法进行初始化和反初始化调用,可以将COM对象释放掉。
现在我想重复使用com实例的引用,在第二次调用初始化后,开始使用,都没有问题。但是在调用反初始化的时候,不能将COM对象释放掉了。现在可以肯定是由于使用rcw的引发的。因为我用非托管的代码多次初始化和反初始化是不会出现这个问题的。如果使用下面的语句将COM计数清空,那么我就不能重用使用过的COM实例的引用了。
System.Runtime.InteropServices.Marshal.ReleaseComObject(object obj);如何才能让COM对象正常的对此初始化和反初始化?请高手帮忙看看。谢谢了!
解决方案 »
- 子控件调用父容器的事件
- Castle ActiveRecord小问题
- C# gridview行定位问题
- 如何用控件名称得到控件句柄
- |zyciis| 如何取各我的命名空间com下面的所有类,谢谢
- 继续100分求助 如何在DATAGRID一行中添加CHECKBOX (不是CHECKBOX列)!!!
- 想做一个这样的通用窗体,供调用,不会,求大家看看
- 在C#下如何在某个DataGrid的某个事件里写代码啊??难道DataGrid的事件都要自己去创建么?
- 我的问题http://community.csdn.net/Expert/topic/3290/3290071.xml?temp=.5709955顶者有分
- 用 OleDbCommand 如何返回 DataTable? 不要返回 DataView ,因为 DataView 没有实现 iCollection 接口,用 DataGrid 显示会有问题
- 帮我找个最好的方法!
- OleDbDataAdapter 和 DataSet使用查询数据库,每次查询后内存都变大,如何解决大量数据查询问题!
初始化会增加组件对象的引用计数,两次初始化引用计数就是2,每一次反初始化[你的叫法]只会将引用计数减1;调用一次反初始化之后组件的引用计数由2变为1,大于0,而只有当引用计数小于等于0的时候才会真正释放
int refCount = Marshal.Release(pUnk);