none
COM组件 如何实现 CLSID 与ProgID的互相调用 RRS feed

  • 问题

  • 在C#中,知道 CLSID 或者PorgID,如何调用COM组件里面的方法呀?实现了从 CLSID 到 PROGID的转化也可以?
    2010年2月2日 2:59

答案


  •         [DllImport("Ole32.dll", EntryPoint = "CLSIDFromProgID")]
            public static extern long CLSIDFromProgID([In, MarshalAs(UnmanagedType.BStr)] string lpszProgID, [Out]out Guid pclsid);

            [DllImport("Ole32.dll", EntryPoint = "ProgIDFromCLSID")]
            private static extern long ProgIDFromCLSID([In] ref Guid clsid, [MarshalAs(UnmanagedType.LPWStr)] out string lplpszProgID);


    使用:
                string progid = "Excel.Application";
                Guid clsid;
                long hr = CLSIDFromProgID( progid, out clsid);

                string nprogid = string.Empty;
                hr = ProgIDFromCLSID(ref clsid, out nprogid);
    2010年2月2日 4:40

全部回复

  • 你需要互操作两个API  CLSIDFromProgID ProgIDFromCLSID:

            WINOLEAPI ProgIDFromCLSID(
    
    REFCLSID clsid ,
    LPOLESTR * lplpszProgID
    );

            HRESULT CLSIDFromProgID(
    
    LPCOLESTR lpszProgID ,
    LPCLSID pclsid
    );



    2010年2月2日 3:03
  • 有具体点的代码吗?
    2010年2月2日 3:04

  •         [DllImport("Ole32.dll", EntryPoint = "CLSIDFromProgID")]
            public static extern long CLSIDFromProgID([In, MarshalAs(UnmanagedType.BStr)] string lpszProgID, [Out]out Guid pclsid);

            [DllImport("Ole32.dll", EntryPoint = "ProgIDFromCLSID")]
            private static extern long ProgIDFromCLSID([In] ref Guid clsid, [MarshalAs(UnmanagedType.LPWStr)] out string lplpszProgID);


    使用:
                string progid = "Excel.Application";
                Guid clsid;
                long hr = CLSIDFromProgID( progid, out clsid);

                string nprogid = string.Empty;
                hr = ProgIDFromCLSID(ref clsid, out nprogid);
    2010年2月2日 4:40