2010-08-13 123 views

回答

2

它基本上調用你的dll(在這種情況下命名爲filename.ax)並調用它的「DllRegisterServer」方法。

對於directshow過濾器,它可能會在windows註冊表中註冊這些過濾器,以便directshow知道它們。

例如:雖然有更爲簡單的版本在那裏https://github.com/rdp/directshow-demo-audio-input-open-source/blob/master/acam/virt_audio_all.cpp#L698調用 https://github.com/rdp/directshow-demo-audio-input-open-source/blob/master/acam/virt_audio_all.cpp#L631

+0

這兩個github鏈接都不再起作用 - 你能夠編輯你的答案中的例子嗎? – codingbadger 2011-11-12 09:57:48

+1

對此表示遺憾 – rogerdpack 2011-11-22 14:12:40

0

regsvr32將DLL和EXE註冊到Windows註冊表中(通常是COM類型庫,類ID,接口ID等)。您可以使用regedit來導航註冊表。

+1

但它是如何工作的?它有什麼樣的影響? – wamp 2010-08-13 09:16:10

29

COM即在Windows中廣泛使用依賴註冊。一個組件將提供類型庫,接口和類。其中每個都由一個GUID定義,以唯一地命名它們。 COM組件還可以定義ProgID,它們是笨重的GUID的快捷方式。

所有這些信息都存儲在名爲HKEY_CLASSES_ROOT的計算機上的特殊註冊表配置單元中。使用RegEdit.exe來查看它。特別是您可以在HKEY_CLASSES_ROOT\TypeLib中找到類型庫,HKEY_CLASSES_ROOT\Interface中的接口和HKEY_CLASSES_ROOT\CLSID中的類。註冊表中的某些信息將包含組件的實際DLL的路徑,允許Windows在請求時查找和加載組件。

當您安裝COM組件時,需要創建正確的註冊表信息。按照慣例,DLL可以提供兩種輸出功能:

當您執行RegSvr32.exe MyComponent.dllRegSvr32.exe可執行文件將嘗試調用DllRegisterServerMyComponent.dll。然後該DLL應該創建所有必要的註冊表項以允許使用該組件。

以類似的方式,您可以使用RegSvr32.exe /u MyComponent.dll取消註冊組件。這將刪除以前添加到註冊表中的所有信息。

Windows很大程度上依賴於COM,COM註冊是最新的非常重要。不幸的是,沒有任何東西阻止您刪除已經註冊的COM組件。這將使註冊表中的懸掛指針指向不再存在的DLL。你甚至不能註銷它,因爲它不再存在。

另一個問題是當兩個不同的應用程序需要不同版本的相同組件時。註冊表只能指向兩個版本中的一個,這可能會導致其中一個應用程序失敗。

Microsoft已爲這些問題創建了修復程序。爲COM組件提供安裝程序要好得多,它可以在組件已被刪除的情況下進行修復和卸載。您還可以在不同版本中創建相同組件的並行安裝。

+0

非常高質量的答案,謝謝 – AFract 2016-08-30 09:21:29

相關問題