regsvr32 filename.ax
我只是看到它说安装成功了,但整个故事是什么?
答案 0 :(得分:30)
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组件提供安装程序要好得多,如果组件已被删除,则可以修复和卸载该组件。您还可以在不同版本中创建相同组件的并行安装。
答案 1 :(得分:2)
它基本上调用你的dll(在这种情况下命名为filename.ax)并调用它的“DllRegisterServer”方法。
对于directshow过滤器,它可能会在Windows注册表中“注册”这些过滤器,以便directshow了解它们。
ex: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
虽然有更简单的版本。
答案 2 :(得分:0)
regsvr32将DLL和EXE注册到Windows注册表中(通常是COM类型库,类ID,接口ID等)。您可以使用regedit导航注册表。