簡體   English   中英

如何使用C ++檢查tlb文件是否在注冊表中注冊?

[英]How to check whether the tlb file is registered in registry using C++?

我使用c#創建了一個類庫。我已經使用注冊了類庫

regasm ..

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

現在我想知道程序集是否已注冊使用c ++。 我需要因為我必須檢查注冊表中的這個DLL,如果它沒有注冊我必須以編程方式注冊它,如果它已注冊然后我只是跳過它。

那我怎么知道匯編是否注冊使用c ++ ...

使用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.
}

檢查HKEY_CLASSES_ROOT下的注冊表:

  • HKEY_CLASSES_ROOT \\ CLSID包含所有類ID
  • HKEY_CLASSES_ROOT \\ Interface包含所有接口ID
  • HKEY_CLASSES_ROOT \\ TypeLib包含所有類型庫ID

使用RegOpenKeyEx函數打開密鑰。 如果密鑰存在,則該函數返回成功。

為什么你需要打擾? 如果它已經存在,那么再次注冊是沒有害處的。

通常可以在HKEY_CLASSES_ROOT \\ CLSID {guid}下的注冊表中找到庫UUID。 通過檢查該密鑰,您知道dll是否已注冊。 RegGetKeyValue可以做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM