一个dll中包含多个com组件,为何不会自动注册多个组件,只会注册其中的1个?

解决方案 »

  1.   

    不对吧,我写过一个dll含多个的,使用regsvr32注册
    都能注册成功.
      

  2.   

    akirya :
    用regsvr32注册是没问题,我的意思是在开发环境下无法自动注册。
      

  3.   

    在开发环境下,得修改那个rgs文件吧。
      

  4.   

    开发环境也是使用regsvr32注册的.
      

  5.   

    检查一下你的项目文件,类型库有一个rgs文件,每个组件也都对应一个rgs文件,都是注册信息。你的问题是开发环境不能注册成功?你用的vista吗?如果是,你需要以管理员身份运行vs才能注册成功。
      

  6.   

    我用的是win2000, 也有2个rgs文件
      

  7.   

    用别人写的包含多个com的DLL试试能不能注册,能的话就是你写的有问题,不能的话就看看环境有没有问题
      

  8.   

    看看rgs文件和资源头文件,看看是否有你要注册的组件
      

  9.   

    每个COM都会注册 楼主是怎么用的com
      

  10.   

    COM的注册函数有问题!
    看COM的本质你就可以找到答案了!
    每个COM组件都得注册才能用COM的客户端运行环境是根据CLSID去注册表查找COM组件的DLL的路径
    然后看系统是否已经加载在内存中,如果没有则加载该DLL
    然后创建组件的类厂,返回类厂指针,在客户端的CoCreateInstance函数内部
    使用给类厂指针创建你需要的COM组件,并将你所需要的接口返回如果是进程外的COM的话,那又是另外一种情形了建议你看下这个 COM 技术内幕——微软组件对象模型
      

  11.   

    用atl生成多个com组件时,会同时对应生成多个.rgs(注册表修改)文件,每一个com组件都对应着一个CLSID,也就是说每一个rgs文件向注册表中注册一个com组件,根据com组件的不同功能注册不同信息。所以,你自动生成的rgs文件需要手动修改,这样,最后atl工程生成的dll文件用regsvr32注册才有效。(用atl自动生成dll时,已经向系统注册了,只有将这个dll移植到其他电脑,才需要用regsvr32再次注册)