COM对象与其基础RCW分开后就不能再使用,如何解决?

时间:2022-11-15 20:15:58
因为需要,我需要做一个控件OWCChart,而这个控件里添加了OWC11这个COM组件.
当我在其它应用程序中,使用这个控件时,出现"COM对象与其基础RCW分开后就不能再使用"这个问题!
如果将这个控件直接拖到FORM上,不做任何调整是没有问题的,但是,当我调整这个控件的一些属性,比如location,width等属性时就会出现这个错误!
望高手指点,分不够可再加!

7 个解决方案

#1


怎么没人回答呢?

#2


分不够可以再加的

#3


来人回贴,好送分!

#4


其他工程中重新添加控件试试

#5


我也遇到同样的问题,我是这样解决的,但愿能对你有所帮助。
我在当前的调用退出时运行了ReleaseComObj(),之后再运行此调用时出现你所说的错误。
我的解决方法:
ReleaseComObj函数如下:
        private void ReleaseComObj()
        {
            if (mLayerToDisplay != null)
                Marshal.ReleaseComObject(mLayerToDisplay);
        }

如果在程序中调用其他子程序时用到本程序中的变量,例如用到了一个“层”,那么在子程序中就不要释放这个“层”,只释放“目标”就可以了。
例如:

Marshal.ReleaseComObject(Layers);
虽然子程序中用到“Layers”,但在上一层调用或其他调用中也用到此“Layers”,所以释放后出现错误。
不知对你是否有帮助。
总之:都不用时才能释放全局变量。


#6


location属性设置为“false”.

#7


我将location属性设置为“TRUE”,也没有问题啊!

#1


怎么没人回答呢?

#2


分不够可以再加的

#3


来人回贴,好送分!

#4


其他工程中重新添加控件试试

#5


我也遇到同样的问题,我是这样解决的,但愿能对你有所帮助。
我在当前的调用退出时运行了ReleaseComObj(),之后再运行此调用时出现你所说的错误。
我的解决方法:
ReleaseComObj函数如下:
        private void ReleaseComObj()
        {
            if (mLayerToDisplay != null)
                Marshal.ReleaseComObject(mLayerToDisplay);
        }

如果在程序中调用其他子程序时用到本程序中的变量,例如用到了一个“层”,那么在子程序中就不要释放这个“层”,只释放“目标”就可以了。
例如:

Marshal.ReleaseComObject(Layers);
虽然子程序中用到“Layers”,但在上一层调用或其他调用中也用到此“Layers”,所以释放后出现错误。
不知对你是否有帮助。
总之:都不用时才能释放全局变量。


#6


location属性设置为“false”.

#7


我将location属性设置为“TRUE”,也没有问题啊!