请问你做的那个做导出函数的那个插件生成的dll为什么查看有5个导出函数。有一个是我加的,还有DLLCanUnloadNow、DLLGetClassObject、DLLRegisterServer、DLLUnRegisterServer这几个,可不可以去掉?

解决方案 »

  1.   

    这几个函数是COM DLL所必需的。其实COM DLL同时也是一个标准DLL。
      

  2.   

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

  3.   

    这DLL本身还是一个ActiveX DLL,只是强行添加了导出函数而已.