代码之家  ›  专栏  ›  技术社区  ›  Cute

如何检查TLB文件是否使用C++注册在注册表中?

  •  2
  • Cute  · 技术社区  · 17 年前

    我用C创建了一个类库。我用

    恢复活力

      RegAsm.exe Discovery.dll /tlb: Discovery.dll /codebase
    

    现在我想知道程序集是否使用C++注册。我需要,因为我必须检查这个DLL的注册表如果它没有注册,我必须注册它 从程序上来说,如果它是注册的,那么我就跳过它。

    那么我如何知道程序集是否使用C++注册…

    4 回复  |  直到 12 年前
        1
  •  2
  •   Goz    17 年前

    你为什么要麻烦?如果它已经存在的话,重新注册也没有什么坏处。

        2
  •  4
  •   Jon Benedicto    17 年前

    使用loadregtypelib加载它,并检查返回值是否有错误。例如:

    HRESULT hr;
    ITypeLib *libraryIntf;
    
    hr = LoadRegTypeLib(IID_GuidOfTypeLibrary, LibraryVersionMajor,
        LibraryVersionMinor, 0, &libraryIntf);
    if(SUCCEEDED(hr))
    {
        libraryIntf->Release();
        libraryIntf = NULL;
        // Type library is registered and can be loaded.
    }
    else
    {
        // Type library is not registered.
    }
    
        3
  •  3
  •   bluish dmajkic    12 年前

    检查hkey_classes_root下的注册表:

    • hkey_classes_root\clsid包含所有类ID
    • hkey_classes_root\interface包含所有接口ID
    • hkey_classes_root\typelib包含所有类型库ID

    使用 RegOpenKeyEx 打开钥匙的功能。如果键存在,则函数返回SUCCESS。

        4
  •  1
  •   xtofl Adam Rosenfield    17 年前

    通常,库UUID可以在注册表中的hkey_classes_root\clsid_guid_下找到。通过检查该密钥,可以知道该dll是否已注册。这个 RegGetKeyValue 可能会成功。