我知道如何注册dll但是我从来没有真正确定我为什么这样做或者在什么条件下必须注册dll。有人可以向我解释或指出一些文件吗?
答案 0 :(得分:44)
注册DLL时,将调用DLL中的DllRegisterServer
方法入口点。同样,在取消注册DLL时会调用DllUnregisterServer
。
如this MSDN article中所述:
指示进程内服务器 为所有人创建其注册表项 此服务器支持的类 模块。如果此功能失败,则 所有的注册表的状态 课程是不确定的。
对于COM DLL,您需要实现自己的DllRegisterServer
和DllUnregisterServer
入口点方法,这些方法会根据需要进行注册/取消注册。可以找到DllRegisterServer
的示例代码here。
注册DLL的最终结果是DLL中组件的所有CLSID都在HKEY_CLASSES_ROOT\CLSID
下注册。这允许CoCreateInstance
在从另一个DLL或应用程序实例化COM对象时找到正确的服务器。
DllUnregisterServer
将执行相反的操作,并从DllRegisterServer
中删除注册表中放置的所有CLSID。
可以找到有关DllRegisterServer
的更多常规信息here。
答案 1 :(得分:6)
最常被称为DLL注册的是它实现COM对象的时候。 regsvr32确保可以创建对象的实例。例如, VBScript使用New或CreateObject(),注册确保COM知道要加载什么DLL以便创建新实例,无论是名称还是CLSID。
请参阅"the layman's explanation"以获取(非常)简短摘要。
答案 2 :(得分:1)
只需查看regsvr32.exe的源代码
即可