2009-07-18 176 views
2

我一直在使用C#創建一個類庫。而我已經註冊使用如何檢查tlb文件是否使用C++在註冊表中註冊?

regasm類庫..

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

現在我想知道大會是否登記不使用C++。我需要,因爲我必須檢查註冊表的這個DLL,如果它沒有註冊我必須註冊它 編程如果它是註冊然後我只是略過它。

所以我怎麼能知道組件是否註冊,或沒有使用C++ ...

回答

2

爲什麼你需要打擾一切?如果它已經在那裏,再次註冊它並沒有什麼壞處。

1

通常情況下,庫UUID可以在HKEY_CLASSES_ROOT \ CLSID {GUID}在註冊表中找到。通過檢查該密鑰,您知道該dll是否已註冊。 RegGetKeyValue可能會伎倆。

3

檢查下HKEY_CLASSES_ROOT註冊表:

  • HKEY_CLASSES_ROOT \ CLSID包含所有的類ID
  • HKEY_CLASSES_ROOT \接口包含了所有的接口ID
  • HKEY_CLASSES_ROOT \類型庫包含了所有類型庫的ID

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

+0

如何以編程方式使用C++找到它任何想法? – Cute 2009-07-18 09:54:31

4

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