wpf中使用Com

第一种:在工程中引用,这种方法快捷,但问题很多;
第二种:使用Type和Activator来创建一个com对象
                首先应引入库using System.Runtime.InteropServices;
                然后在需要的地方加入如下:
                                  Type type = Type.GetTypeFromProgID("AMediaPlayer.Player");

                                  或

                                {
                                              Guid clsid = new Guid();
                                               int hr = CLSIDFromProgID("AMediaPlayer.Player", ref clsid);
                                               Type type = Type.GetTypeFromCLSID(clsid); //此处的guid应该是(CLSID associated with the data and code),否则会报错

                                   }
                                object obj = Activator.CreateInstance(type);
                                IPlayer pPlayer = obj as IPlayer; //IPlayer 是个接口
               然后就可以使用pPlayer对象了

               这里要注意的就是上面那两个函数的用法,CLSIDFromProgID 和GetTypeFromProgID。上面都写的应该清楚了;
第三种:使用CoCreateInstance来创建一个实例
                首先也要引入using System.Runtime.InteropServices;
               然后在类中
[DllImport("ole32.dll", ExactSpelling = true)]
        private static extern int CoCreateInstance(
            [In] ref Guid clsid,
            IntPtr pUnkOuter,
            uint context,
            [In] ref Guid iid,
            [Out] out IntPtr ppv);

        [DllImport("ole32.dll", ExactSpelling = true)]
        private static extern int CLSIDFromProgID(
            [MarshalAs(UnmanagedType.LPWStr)] string progid,
            ref Guid clsid);
以上应该是代理,具体概念不知道,本是搞c++的。
   Guid clsid = new Guid();
   int hr = CLSIDFromProgID("AMediaPlayer.Player", ref clsid); //CLSID associated with the data and code
   
    Guid idispatch_id = new Guid("3A2A90D6-1255-4D5C-86C0-B8694B712C66");//这个是接口guid
    IntPtr pIDispatch;
    hr  = CoCreateInstance(ref clsid,IntPtr.Zero,1, // CLSCTX_INPROC_SERVER
        ref idispatch_id,
        out pIDispatch);
    object obj = Marshal.GetObjectForIUnknown(pIDispatch);
    IPlayer pPlayer = obj as IPlayer; //IPlayer 是个接口

这三种都测试过了,都能用,第二种是最方便的。可能有些地方会写漏,但大概是这样的

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值