老马进来下
请问你做的那个做导出函数的那个插件生成的dll为什么查看有5个导出函数。有一个是我加的,还有DLLCanUnloadNow、DLLGetClassObject、DLLRegisterServer、DLLUnRegisterServer这几个,可不可以去掉?
[解决办法]
DLLCanUnloadNow、DLLGetClassObject、DLLRegisterServer、DLLUnRegisterServer
这四个函数是dll为COM加的输出函数,对于动态连接来说,客户进程会将所需的服务器组件加载进来(也就是加到客户进程的地址空间),这个时候的COM也叫做进程内服务器,dll必须导出DLLCanUnloadNow,这样组件就知道是不是可以卸载掉dll
DLLGetClassObject用来返回COM对象的类工厂指针,它被API函数CoGetClassObject调用(VB中由CreateObject()封装),这样客户进程就可以用这个类工厂的指针将对象实例化。
DLLRegisterServer、DLLUnRegisterServer用来实现dll的自注册
COM的一个重要的特性就是位置的透明性,只要注册,添加引用,随便放在什么地方都可以用这个组件
注册表里面会包含组件的CLSID, IID, PROGID等信息,这些都是通过这两个函数实现的