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

alphagx 2002-06-12 11:01:02
我的一个ATL组件,是EXE文件,
我用VBScript能调用,
当用VC的CoCreateInstance却不行,返回的错误值是0X80029C4A
...全文
148 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
alphagx 2002-06-15
  • 打赏
  • 举报
回复
欢迎大家继续讨论。。。。。
rick1126 2002-06-15
  • 打赏
  • 举报
回复
还有提醒一点, 我发现组件在中文目录里面注册成功也无法调用, 不知道大家有没有类似情况.
chenybin 2002-06-15
  • 打赏
  • 举报
回复
UP!!!!!!!!!!
spidertan 2002-06-14
  • 打赏
  • 举报
回复
Up!
alphagx 2002-06-14
  • 打赏
  • 举报
回复
我也感觉特别奇怪,
我后来自己重新生成了一个项目,
一切OK。
虽然我的IDR_NpsData资源的语言类型为chinese(P.R.C)

TO: loyee
请到
http://www.csdn.net/expert/topic/797/797141.xm
拿分,这个帖子的问题我在这儿已经问了。
loyee 2002-06-13
  • 打赏
  • 举报
回复
CoCreateInstance(...)中你的CLSID跟INTERFACE ID是什么呢?是否也可以说一下你的参数?
alphagx 2002-06-13
  • 打赏
  • 举报
回复
这是接口的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}'
}
}
}
alphagx 2002-06-13
  • 打赏
  • 举报
回复
在VBScript中运行正常,
在CoCreateInstance(....)前面调用了
CoInit...
RGS文件中的 内容
HKCR
{
NoRemove AppID
{
{DE7B0787-4F8E-4396-ADCB-380F135CEB3A} = s 'NPSData'
'NPSDATA.EXE'
{
val AppID= s {DE7B0787-4F8E-4396-ADCB-380F135CEB3A}
}


}
}

zdhe 2002-06-13
  • 打赏
  • 举报
回复
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..
loyee 2002-06-13
  • 打赏
  • 举报
回复
正常情况下,在你的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对象的话,好象不应该有这个问题的.
daehappy 2002-06-13
  • 打赏
  • 举报
回复
up!关注!
loyee 2002-06-13
  • 打赏
  • 举报
回复
调用方式应该没有什么问题.如果查了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");
......
}
alphagx 2002-06-13
  • 打赏
  • 举报
回复
hr = CoCreateInstance( CLSID_ConfigData,
NULL,
CLSCTX_ALL,
IID_IConfigData,
(void**) &ptrConfigData );
loyee 2002-06-12
  • 打赏
  • 举报
回复
也不能说注册绝对没有问题. LoadRegTypeLib ()系列的函数调用会导致这个错误.而这些函数都需要访问注册表.只是他对问题的描述还不够太具体.

是否可以把ATL对象的注册表内容贴出来?在VBScript中调用确定正常吗?CoCreateInstance(...)前面是否调用了CoInitialize(...)或进行其他初始话COM环境的操作?
alphagx 2002-06-12
  • 打赏
  • 举报
回复
我在组件中使用了ADO,我的系统是Win2K Server Sp2,
上面是空的系统,没有安装VC,VB之类的
alphagx 2002-06-12
  • 打赏
  • 举报
回复
But I can create and call the ATL Sever with VBScript..
Savage_ts 2002-06-12
  • 打赏
  • 举报
回复
估计注册没有问题,要是有这个错误的话,就根本不能注册。错误是不能加载库,你可以去查一下MSDN
loyee 2002-06-12
  • 打赏
  • 举报
回复
#define TYPE_E_CANTLOADLIBRARY _HRESULT_TYPEDEF_(0x80029C4AL)

在创建ATL对象的时候,你在ATL内部是否调用了其他DLL?查看该DLL是否在运行的机器里面.

用DEPENDS工具查看你的ATL运行时需要的DLL,并查看这些运行环境在创建ATL对象的机器里面是否具备.

如果你的ATL依赖第三方开发环境,查看是否安装了第三方部件的运行环境.

Savage_ts 2002-06-12
  • 打赏
  • 举报
回复
能把问题说清楚点吗?
iterator 2002-06-12
  • 打赏
  • 举报
回复
//
// MessageId: TYPE_E_CANTLOADLIBRARY
//
// MessageText:
//
// Error loading type library/DLL.
//
#define TYPE_E_CANTLOADLIBRARY _HRESULT_TYPEDEF_(0x80029C4AL)

注册有问题吧?
加载更多回复(3)
标题人事档案管理系统设计与实现研究AI更换标题第1章引言介绍人事档案管理系统的研究背景、意义、国内外研究现状以及论文的方法和创新点。1.1研究背景与意义分析人事档案管理在企业中的重要性及系统开发的必要性。1.2国内外研究现状概述国内外人事档案管理系统的研究进展和现状。1.3研究方法及创新点阐述本文的研究方法和在系统设计上的创新点。第2章相关理论介绍人事档案管理系统设计的相关理论。2.1档案管理理论阐述档案分类、存储、检索等基本理论。2.2信息系统开发理论介绍信息系统开发的基本流程、方法和技术。2.3数据库管理理论讨论数据库设计、数据安全与备份等理论。第3章人事档案管理系统设计详细介绍人事档案管理系统的设计方案和实现过程。3.1系统需求分析分析系统的功能需求、性能需求和用户需求。3.2系统架构设计给出系统的整体架构、模块划分和交互流程。3.3数据库设计设计数据库结构,包括表结构、字段设置和关系模型。第4章系统实现与测试阐述人事档案管理系统的实现过程和测试方法。4.1系统开发环境与工具介绍系统开发所使用的环境和工具。4.2系统实现过程详细描述系统各个模块的实现过程和关键代码。4.3系统测试与优化对系统进行功能测试、性能测试和安全测试,并进行优化。第5章研究结果与分析呈现人事档案管理系统的实验分析结果。5.1系统功能实现情况介绍系统各项功能的实现情况和效果。5.2系统性能评估从响应时间、吞吐量等指标评估系统性能。5.3对比方法分析将本系统与其他类似系统进行对比分析,突出优势。第6章结论与展望总结本文的研究成果,并展望未来的研究方向。6.1研究结论概括本文的主要研究结论和系统实现效果。6.2展望指出系统存在的不足和未来改进的方向。

3,248

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧