2009-03-06 16 views
51

Wiem, jak zarejestrować biblioteki DLL, ale nigdy tak naprawdę nie jestem pewien, dlaczego robię to lub w jakich warunkach dll muszą być rejestrowane. Czy ktoś mógłby mi wytłumaczyć lub wskazać jakąś dokumentację?Do czego służy rejestracja biblioteki DLL?

Odpowiedz

40

Po zarejestrowaniu biblioteki DLL wywoływana jest pozycja wejściowa metody DllRegisterServer w bibliotece DLL. Podobnie, DllUnregisterServer jest wywoływany, gdy biblioteka DLL jest wyrejestrowana.

Jak opisano w this MSDN article:

zobowiązuje serwer w procesie do tworzyć swoje wpisy rejestru dla wszystkich klas obsługiwanych w tym serwerze modułu . Jeśli ta funkcja się nie powiedzie, stan rejestru dla wszystkich jej klas jest nieokreślony.

Dla COM DLL, trzeba będzie wdrożyć własne DllRegisterServer i DllUnregisterServer metod punkt wejścia, które wykonują Rejestrowanie/wyrejestrowanie się odpowiednio. Przykładowy kod dla DllRegisterServer można znaleźć here.

Końcowym rezultatem rejestracji biblioteki DLL jest zarejestrowanie wszystkich identyfikatorów CLSID dla komponentów w bibliotece DLL pod numerem HKEY_CLASSES_ROOT\CLSID. To pozwala CoCreateInstance znaleźć właściwy serwer podczas tworzenia obiektów COM z innej biblioteki DLL lub aplikacji.

DllUnregisterServer zrobi odwrotność i usunie wszystkie identyfikatory CLSID z rejestru, które zostały tam umieszczone przez DllRegisterServer.

Więcej ogólnych informacji na temat DllRegisterServer można znaleźć here.

+0

Kiedy tworzę ActiveX DLL w VB6 nie mam do wdrożenia DllRegisterServer. – CJ7

6

To, co jest najczęściej określane jako rejestracja DLL, to implementacja obiektu COM. regsvr32 zapewnia, że ​​można utworzyć instancję obiektu. Kiedy np. VBScript używa New lub CreateObject(), rejestracja zapewnia, że ​​COM wie, którą bibliotekę DLL załadować, aby utworzyć nową instancję, czy to przez nazwę czy przez CLSID.

Zobacz podsumowanie (bardzo) krótkie pod numerem "the layman's explanation".

+0

Link jest uszkodzony. Proszę podać zastępcę. –

+1

Gotowe. Zarchiwizowane również jako https://web.archive.org/web/20170222094351/https://chewychong.wordpress.com/2004/08/23/layman-s-explanation-of-regscvs-regasm-regsvr32/ –

2

Wystarczy zobaczyć kod źródłowy regsvr32.exe

+4

Byłem zaskoczony, że ten kod źródłowy jest faktycznie dostępny w Visual Studio: http://msdn.microsoft.com/en-us/library/ms177531.aspx –