wam*_*amp 13 regsvr32 directshow
regsvr32 filename.ax
Run Code Online (Sandbox Code Playgroud)
我只是看到它说成功安装了什么,但是整个故事是什么?
Mar*_*age 30
Windows中广泛使用的COM依赖于注册.组件将提供类型库,接口和类.其中每个都由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.dll
的RegSvr32.exe
可执行文件将尝试调用DllRegisterServer
在MyComponent.dll
.然后,DLL应该创建所有必需的注册表项以允许使用该组件.
以类似的方式,您可以使用RegSvr32.exe /u MyComponent.dll
注销组件.这将删除以前添加到注册表的所有信息.
Windows严重依赖COM,COM注册是最新的非常重要.遗憾的是,没有什么可以阻止您删除已注册的COM组件.这将在注册表中留下指向不再存在的DLL的悬空指针.您甚至无法注销它,因为它已不存在.
另一个问题是当两个不同的应用程序需要相同组件的不同版本时.注册表只能指向两个版本中的一个,这可能会导致其中一个应用程序失败.
Microsoft已针对这些问题创建了修复程序.为COM组件提供安装程序要好得多,如果组件已被删除,则可以修复和卸载该组件.您还可以在不同版本中创建相同组件的并行安装.
它基本上调用您的 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-音频输入开源/blob/master/acam/virt_audio_all.cpp#L631
尽管还有更简单的版本。
归档时间: |
|
查看次数: |
7741 次 |
最近记录: |