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

alphagx 2002-06-12 11:01:02
我的一个ATL组件,是EXE文件,
我用VBScript能调用,
当用VC的CoCreateInstance却不行,返回的错误值是0X80029C4A
...全文
134 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用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)

3,248

社区成员

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

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