2010-02-17 14 views
11

Voglio creare una piccola app per aggiungere e rimuovere voci di menu di contesto definite dall'utente dal registro. Per fare questo, in qualche modo ho bisogno di ottenere il CLSID di una DLL arbitraria in modo da poter eseguire il backup delle voci precedenti, se esistono prima di scriverne di nuove.Ottenere CLSID per un file DLL?

Sebbene il regsrv32 riesca in qualche modo a creare questo numero magico, non ho trovato alcun modo per ottenere quel numero da solo.

spero che ci sia qualcosa di meglio di questo:

  1. Registro di scansione per il nome della DLL
  2. se non trovato, registrarlo, la scansione di nuovo, e poi annullare la registrazione di nuovo

Se la DLL è stata rinominata, posso vedere una possibilità di problemi.

risposta

4

Si potrebbe considerare chiamando LoadTypeLibEx nella DLL specificando REGKIND_NONE e quindi esaminare ottenere le informazioni TypeLibInfo disponibili tramite l'interfaccia ITypeLib restituita a voi.

Ci sono alcune informazioni su questo genere di cose su MSDN. È un vecchio collegamento basato su VB6 ma ha informazioni utili sull'ispezione dei componenti COM in questo modo.

2

Si potrebbe provare a utilizzare RegOverridePredefKey() per intercettare ciò che regsvr32 fa al registro - chiama RegOverridePredefKey(), quindi riproduce ciò che regsvr32 fa - LoadLibrary() sul server COM, chiama DllRegisterServer() - quindi controlla le modifiche fatte. Con RegOverridePredefKey() isolerai le modifiche e non lascerai che diventino persistenti.

Problemi correlati