各位达人,我用vc建立了两个dll 一个是普通的dll,一个是在建立时选中的“自动“这一项选项,这样 第一个dll是不能通过 regsvr32进行注册的,第二个可以通过 regsvr32注册,那么这两个dll有什么区别呢?在调用上哪个更好?不知道我说明白没有,请各位把有关的都告诉我,现谢谢了。

解决方案 »

  1.   

    可以自注册的DLL,里面会导出一个知名函数 DllRegisterServer. regsvr32就是调用这个函数来进行注册的如果没有这个导出函数,regsvr32就会认为该不可以自注册
      

  2.   

    非常感谢楼上,那我想问一下,这两种dll在调用的时候有什么区别,也就是说一个dll在注册的情况下调用,和在没有注册的情况下调用,有什么区别?
      

  3.   

    楼主指的是 Automation 么,选择的话可以支持 IDispatch COM 接口
    区别:
    COM dll 注册到注册表中后可以在任意路径访问到该组件(组件是通过注册表来取得dll位置的),使用的时候可以导出COM接口,用CreateInstance来创建COM对象
    普通 dll 必须放置到执行文件的当前路径或 path 路径下,通常用 _declspec(import) 声明导入函数,也可以用 LoadLibrary 动态加载
    不过 COM dll 也可以象普通 dll 一样导出函数,即 COM dll 中也可以实现普通 dll 的功能