CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  ATL/ActiveX/COM

ATL问题,很急,今天晚上一定要搞定

楼主alphagx(alpha)2002-06-12 23:01:02 在 VC/MFC / ATL/ActiveX/COM 提问

我的一个ATL组件,是EXE文件,    
  我用VBScript能调用,  
  当用VC的CoCreateInstance却不行,返回的错误值是0X80029C4A 问题点数:200、回复次数:24Top

1 楼alphagx(alpha)回复于 2002-06-12 23:01:49 得分 0

奇怪的是在有的电脑上运行正常  
  Top

2 楼alphagx(alpha)回复于 2002-06-12 23:06:21 得分 0

我的组件的Proxy/Stub   文件也生成,并注册成功了。    
   
  为什么会出现上面的情况呢??  
   
   
  Top

3 楼Kevin_qing()回复于 2002-06-12 23:24:51 得分 0

gzTop

4 楼iterator(螃蟹)回复于 2002-06-12 23:29:45 得分 0

//  
  //   MessageId:   TYPE_E_CANTLOADLIBRARY  
  //  
  //   MessageText:  
  //  
  //     Error   loading   type   library/DLL.  
  //  
  #define   TYPE_E_CANTLOADLIBRARY                       _HRESULT_TYPEDEF_(0x80029C4AL)  
   
  注册有问题吧?Top

5 楼Savage_ts(野人)回复于 2002-06-12 23:29:59 得分 0

能把问题说清楚点吗?Top

6 楼loyee()回复于 2002-06-12 23:33:54 得分 200

#define   TYPE_E_CANTLOADLIBRARY                       _HRESULT_TYPEDEF_(0x80029C4AL)  
   
  在创建ATL对象的时候,你在ATL内部是否调用了其他DLL?查看该DLL是否在运行的机器里面.  
   
  用DEPENDS工具查看你的ATL运行时需要的DLL,并查看这些运行环境在创建ATL对象的机器里面是否具备.  
   
  如果你的ATL依赖第三方开发环境,查看是否安装了第三方部件的运行环境.  
   
  Top

7 楼Savage_ts(野人)回复于 2002-06-12 23:40:55 得分 0

估计注册没有问题,要是有这个错误的话,就根本不能注册。错误是不能加载库,你可以去查一下MSDNTop

8 楼alphagx(alpha)回复于 2002-06-12 23:53:31 得分 0

But   I   can   create   and   call   the   ATL   Sever   with   VBScript..  
  Top

9 楼alphagx(alpha)回复于 2002-06-12 23:58:59 得分 0

我在组件中使用了ADO,我的系统是Win2K   Server   Sp2,    
  上面是空的系统,没有安装VC,VB之类的Top

10 楼loyee()回复于 2002-06-12 23:59:00 得分 0

也不能说注册绝对没有问题.     LoadRegTypeLib   ()系列的函数调用会导致这个错误.而这些函数都需要访问注册表.只是他对问题的描述还不够太具体.  
   
  是否可以把ATL对象的注册表内容贴出来?在VBScript中调用确定正常吗?CoCreateInstance(...)前面是否调用了CoInitialize(...)或进行其他初始话COM环境的操作?Top

11 楼alphagx(alpha)回复于 2002-06-13 00:02:31 得分 0

在VBScript中运行正常,  
  在CoCreateInstance(....)前面调用了  
  CoInit...  
  RGS文件中的   内容  
  HKCR  
  {  
  NoRemove   AppID  
  {  
  {DE7B0787-4F8E-4396-ADCB-380F135CEB3A}   =   s   'NPSData'  
  'NPSDATA.EXE'    
  {  
  val   AppID=   s   {DE7B0787-4F8E-4396-ADCB-380F135CEB3A}  
  }  
   
     
  }  
  }  
   
  Top

12 楼alphagx(alpha)回复于 2002-06-13 00:03:23 得分 0

这是接口的RGS文件  
  HKCR  
  {  
  NPSData.ConfigData.1   =   s   'ConfigData   Class'  
  {  
  CLSID   =   s   '{60FB529A-4FD6-479D-9D09-33F413E52AE6}'  
  }  
  NPSData.ConfigData   =   s   'ConfigData   Class'  
  {  
  CLSID   =   s   '{60FB529A-4FD6-479D-9D09-33F413E52AE6}'  
  CurVer   =   s   'NPSData.ConfigData.1'  
  }  
  NoRemove   CLSID  
  {  
  ForceRemove   {60FB529A-4FD6-479D-9D09-33F413E52AE6}   =   s   'ConfigData   Class'  
  {  
  ProgID   =   s   'NPSData.ConfigData.1'  
  VersionIndependentProgID   =   s   'NPSData.ConfigData'  
  ForceRemove   'Programmable'  
  LocalServer32   =   s   '%MODULE%'  
  val   AppID   =   s   '{DE7B0787-4F8E-4396-ADCB-380F135CEB3A}'  
  'TypeLib'   =   s   '{B774E89A-EBAE-4E7E-B1F4-9C599AAAB916}'  
  }  
  }  
  }  
  Top

13 楼loyee()回复于 2002-06-13 00:10:58 得分 0

CoCreateInstance(...)中你的CLSID跟INTERFACE   ID是什么呢?是否也可以说一下你的参数?Top

14 楼alphagx(alpha)回复于 2002-06-13 01:05:02 得分 0

hr   =   CoCreateInstance(   CLSID_ConfigData,  
                                                      NULL,  
                                                      CLSCTX_ALL,  
                                                      IID_IConfigData,  
                                                      (void**)   &ptrConfigData   );  
  Top

15 楼loyee()回复于 2002-06-13 04:26:18 得分 0

调用方式应该没有什么问题.如果查了DLL没有缺少并且DLL版本都符合你运行ATL条件还是有问题的话,是否可以尝试下面的方法来调用ATL对象.  
   
  下面的方式应该跟你VBScript中调用非常接近.注意#import后面要跟你ATL对象文件名实际路径.using   namespace后也要是你ATL对象的名字空间.根据你的登记项内容,NPSDATALib应该是Default名字.同时不要包含ATL对象一些接口的头文件.  
   
  如果确定ATL对象在VBScript能够运行的话,最大可能是VC中调用ATL对象方式的问题.只是用CoCreateInstance(...)没法调用的确很奇怪.  
   
  还有一个建议是,屏蔽ATL对象中的具体代码.只保留相同的接口,方法,属性等框架.用CoCreateInstance(...)调用看看是否可以创建ATL对象的实例,如果可以的话,然后再慢慢添加具体代码,找到哪些代码导致0x80029C4A的错误码.如果不行的话,应该是调用ATL对象方式的问题了.  
   
  #import   "NPSData.exe"  
  using   namespace   NPSDATALib;  
   
  void   LoadATL()  
  {  
  IConfigDataPtr     pConfigData;  
   
  HRESULT   hr;  
   
  CoInitialize(NULL);  
  hr   =   pConfigData.CreateInstance("'NPSData.ConfigData");  
                    ......  
  }Top

16 楼daehappy(追求120%结贴)回复于 2002-06-13 21:57:34 得分 0

up!关注!Top

17 楼loyee()回复于 2002-06-13 22:58:21 得分 0

正常情况下,在你的ATL对象的_tWinMain(...)中有下面的一段代码.  
   
          while   (lpszToken   !=   NULL)  
          {  
                  if   (lstrcmpi(lpszToken,   _T("UnregServer"))==0)  
                  {  
                          _Module.UpdateRegistryFromResource(IDR_NpsDAta,   FALSE);  
                          nRet   =   _Module.UnregisterServer(TRUE);  
                          bRun   =   FALSE;  
                          break;  
                  }  
                  if   (lstrcmpi(lpszToken,   _T("RegServer"))==0)  
                  {  
                          _Module.UpdateRegistryFromResource(IDR_NpsDAta,   TRUE);  
                          nRet   =   _Module.RegisterServer(TRUE);  
                          bRun   =   FALSE;  
                          break;  
                  }  
                  lpszToken   =   FindOneOf(lpszToken,   szTokens);  
          }  
   
  注意查看ATL对象的资源表中IDR_NpsDAta内容,位于"Registry"段中.IDR_NpsDAta就是你要写入\\HKEY_CLASSED_ROOT\APPID中的内容.为了更加保险,确定IDR_NpsDAta资源的语言类型为Englist(U.S.).  
   
  ATL有关写登记项内容是标准的过程.我想你没有必要自己用Reg...系列函数自己些.  
   
  如果你用VC模板生成ATL对象的话,好象不应该有这个问题的.Top

18 楼zdhe(zdhe)回复于 2002-06-13 23:49:53 得分 0

if   you   use   own   proxy/stub,   you   must   registry   AppID   ...  
   
  in   vbscript,   the   download   package   have   generated   this   ,   and   when   donwload   finish,   IE   automatically   registered   it.    
   
  you   does   need   regist   everything   you   need.   when   directly   use   in   VC..Top

19 楼spidertan(灭蚊刀)回复于 2002-06-14 00:25:26 得分 0

Up!Top

20 楼alphagx(alpha)回复于 2002-06-14 16:20:53 得分 0

我也感觉特别奇怪,  
  我后来自己重新生成了一个项目,  
  一切OK。  
  虽然我的IDR_NpsData资源的语言类型为chinese(P.R.C)  
   
  TO:   loyee    
  请到  
  http://www.csdn.net/expert/topic/797/797141.xm  
  拿分,这个帖子的问题我在这儿已经问了。  
  Top

21 楼chenybin(小马)回复于 2002-06-15 01:57:36 得分 0

UP!!!!!!!!!!Top

22 楼rick1126()回复于 2002-06-15 07:56:38 得分 0

还有提醒一点,   我发现组件在中文目录里面注册成功也无法调用,   不知道大家有没有类似情况.Top

23 楼alphagx(alpha)回复于 2002-06-15 11:06:48 得分 0

欢迎大家继续讨论。。。。。Top

相关问题

  • 急求javascrip脚本,搞定给分
  • 超急!!!谁能搞定给100分
  • 急,才220分了,搞定全送啦
  • 搞定
  • 急急急急!小问题,帮忙搞定,在线等待!!
  • 有没有人能搞定这个错误???急!!!急!!!
  • 这段遍历+循环的代码如何搞定?急!!!
  • 大侠,help me,搞定给分,在线等待,急啊
  • HyperLinkColumn小问题,急在线等搞定就给钱
  • 各位大侠帮个忙吧,急!急!急!(搞定马上送分)

关键词

  • atl
  • 组件
  • 文件
  • 注册
  • dll
  • npsdata
  • 调用
  • x80029c4
  • cantloadlibrary
  • configdata

得分解答快速导航

  • 帖主:alphagx
  • loyee

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo