zoukankan      html  css  js  c++  java
  • 由CLSID得到ProgID 以及 由ProgID得到CLSID Mr

    以下代码出自《杨老师之Blog——COM组件设计与应用(四)》。
    地址:http://blog.vckbase.com/teacheryang/archive/2005/07/04/9135.html

    一、由CLSID得到ProgID(以Word为例子)
    void CGetProgIDFromCLSIDDlg::OnBnClickedButton1()
    {
      ::CoInitialize(NULL);
      HRESULT hr;
      CLSID clsid = {0x209ff,0,0,{0xc0,0,0,0,0,0,0,0x46}};
      LPOLESTR lpwProgID = NULL;

      hr = ::ProgIDFromCLSID(clsid, &lpwProgID);
      if(SUCCEEDED(hr))
      {
        ::MessageBoxW(NULL, lpwProgID, L"ProgID", MB_OK);

        IMalloc *pMalloc = NULL;
        hr = ::CoGetMalloc(1, &pMalloc); //取得IMalloc
        if(SUCCEEDED(hr))
        {  
          pMalloc->Free(lpwProgID); //释放ProgID内存
          pMalloc->Release();   //释放IMalloc
        }
      }
      ::CoUninitialize();
    }
    运行结果:

    二、由ProgID得到CLSID(以Excel为例子)
    void CGetProgIDFromCLSIDDlg::OnBnClickedButton2()
    {
      ::CoInitialize(NULL);     //COM初始化
             //如果是MFC程序,可以使用AfxOleInit()替代
      HRESULT hr;
      USES_CONVERSION;          // 只需要调用一次,就可以在函数中进行多次转换
      LPCOLESTR lpwProgID = T2COLE(_T("Excel.Application.14"));
      CLSID clsid;

      hr = ::CLSIDFromProgID(lpwProgID,&clsid);
      CString str;
      str.Format("%08X-%04X-%04x-%02X%02X-%02X%02X%02X%02X%02X%02X" ,
                            clsid.Data1,clsid.Data2,clsid.Data3,
                            clsid.Data4[0],clsid.Data4[1],clsid.Data4[2],
                            clsid.Data4[3],clsid.Data4[4],clsid.Data4[5],
                            clsid.Data4[6],clsid.Data4[7]); 
      if(SUCCEEDED(hr))
      {
        ::MessageBox(NULL, (LPCSTR)str, _T("CLSID"), MB_OK);
      }
      ::CoUninitialize();

    运行结果:

  • 相关阅读:
    【随手记】常用16进制代表的容量或位置
    精通css——position属性
    Ubuntu安装GitLab
    Linux内核
    分布式(一)——分布式系统的特性
    【树莓派】入门
    Intel CPU发展历史
    C++读mnist数据
    实验代码一:用来链表实现单向图
    Hadoop配置+centos6.5
  • 原文地址:https://www.cnblogs.com/miaohw/p/2147305.html
Copyright © 2011-2022 走看看