1、C#中对于COM接口定义必须严格按照COM的实现顺序定义,因为C#中的CCW映射是以实际接口顺序定义的,先后次序的颠倒就可能使得接口内的函数返回不正确。
2、COM的定义有2种,一种是MIDL定义,还有一种就是普通的内部定义(从IUnknown或IDispatch继承),对于前者,可以直接通过导入 其生成的tlb文件实现,后一种,如果没有程序的源代码,就很难知道其实现的顺序,比如DirectShow中filter的那些个属性页中的设定。
3、另外自已在实际中碰到的问题就是关于ComInterfaceType的选择,如是COM定义是第二种,就必须根据其实现的接口选择InterfaceIsIUnknown或InterfaceIsIDispatch。
4、最后要提一点,拿个人而言,一般在编写此类程序时,需要将线程模式改为MTAThread。如果在单线程模式中,往往对ds的接口调用通常会失败。
2、COM的定义有2种,一种是MIDL定义,还有一种就是普通的内部定义(从IUnknown或IDispatch继承),对于前者,可以直接通过导入 其生成的tlb文件实现,后一种,如果没有程序的源代码,就很难知道其实现的顺序,比如DirectShow中filter的那些个属性页中的设定。
3、另外自已在实际中碰到的问题就是关于ComInterfaceType的选择,如是COM定义是第二种,就必须根据其实现的接口选择InterfaceIsIUnknown或InterfaceIsIDispatch。
4、最后要提一点,拿个人而言,一般在编写此类程序时,需要将线程模式改为MTAThread。如果在单线程模式中,往往对ds的接口调用通常会失败。