用VC7.1 - ATL - 打开属性化选项  开发的 基于DLL 的COM。注册代码是自动形成的。可是发生不可思义的事情是,
使用 RegSvr32 程序,在某些机器上能正常注册,
在某些机器上无法注册。提示“Load library (这里是文件路径) fail, 找不到模块”我遇到过两台不能注册的机器是:
1、IBM + NT2000
2、Windows XP求教高手,为什么会这样?

解决方案 »

  1.   

    tools -> depends 查看你的DLL模块的依赖关系可能你的DLL需要的某些库文件在这两台机器上没有
      

  2.   

    谢谢,wyljery(猎人计划) ,我查找过网络,是好象看到有这样一种说法。
    但我搞不清楚,DLL模块的依赖关系的定义是什么?写的哪个DLL,用的是ATL,而且没有动态连接其他库。
    但我的DLL是调用了其他的COM,在FinalConstruct里,创建了 Excel.Application 的实例。
    不过这是创建组件实例时(运行时的)依赖啊。所以,我一直没有怀疑他造成注册的错误。
    我以为,regsvr32 只是简单地调用了 DllRegisterServer,只是在注册表里添加注册项。难道,他还会尝试(要求)成功创建组件实例?才能正确注册?你能不能指出什么情况算“DLL模块的依赖关系”,万分感谢。
      

  3.   

    to  wyljery(猎人计划),唉,我没有安装VC6,找不到depends 工具啊。
    不过我查看 IDL定义,其中有一句importlib("STDOLE2.TLB");他会不会是你说的“DLL模块的依赖”,?
      

  4.   

    我碰到的也是这个问题,我刚刚开始接触COM用拿书上的例题用MFC写的进程内组件就是无法注册
    出错提示是出错在OLELINK.CPP 291行上
    但是这个是对一个CDocument类指针的检查,真是被弄的莫名其妙。
    我的系统是WIN2K SERVER
      

  5.   

    为了看到 wyljery(猎人计划) 的模块依赖,
    我特意安装了vc6。结果发现他是连接到好几个动态连接库。
    一些是系统的。一些是VC7.1的。
    我在工程里已经选了静态连接到ATL了。
    仍然没有和vc7.1脱离关系?
      

  6.   

    “我把注册表信息导出。然后在安装的机器上导入。就能使用了。”从这看出,没有安装的VC.net的机器也能使用。
    和 “依赖到某些VC7.1的动态连接库”不是矛盾?
      

  7.   

    我的也解决了,我采用RELEASE版本就可以注册了
      

  8.   

    你幸福啊,我一直都是用Release版本的。但也是出错。还有,我从depends看到DLL依赖到MSVCR71.DLL,但为什么我没有拷贝这个文件到客户机上,也能运行呢?