大家帮帮忙,问题解决了结帖给分,没人理我只好一头撞死...............在线等

zqm1972 2003-10-09 04:16:33
我做了一个COM 组件在WIN2000下好用,在WIN98下不好使了,为什么啊?

下面是客户端调用代码:

HRESULT hr;
IFirst_ATL *IFirstATL = NULL;

// 初始化COM
hr = CoInitialize(0);

// 使用 SUCCEEDED 宏并检查我们是否能得到一个接口指针
if(SUCCEEDED(hr))
{
hr = CoCreateInstance( CLSID_First_ATL, NULL, CLSCTX_INPROC_SERVER,
IID_IFirst_ATL, (void**) &IFirstATL);

// 如果成功,则调用AddNumbers 方法,否则显示相应的出错信息
错误点:///////在98下 hr=-237459404,///////////////////
if(SUCCEEDED(hr))
{
long ReturnValue;

IFirstATL->AddNumbers(5, 7, &ReturnValue);
cout << "The answer for 5 + 7 is: "ReturnValue << endl;
IFirstATL->Release();
}
else
{
cout << "CoCreateInstance Failed." << endl;
}
}
// 释放 COM
CoUninitialize();

}

为什么啊?
帮帮我,我还不想死
...全文
50 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjg751206 2003-10-11
  • 打赏
  • 举报
回复
你在98下编译,运行,拿到2000试试,98机制和2000不同,在2000下没问题的程序98下面问题多那,实在不行,98 不管了,要求客户使用2000以上配置,因为98会离我们越来越远的
xiaoqiqixiao 2003-10-11
  • 打赏
  • 举报
回复
-2147221164十六进制是0x80040154,挺正常的错误吧
不太懂COM,觉得至少应该先分析是FirstAtl组件问题还是这个CoCreateInstance调用参数问题吧
atEleven 2003-10-11
  • 打赏
  • 举报
回复
有可能使用了nt下面才能用的特殊函数

在98下就不能运行.
lop5712 2003-10-11
  • 打赏
  • 举报
回复
啊,多谢 xiaoqiqixiao(七七) 提醒,的确是转错了,是0x80040154,多谢。

0x80040154是REGDB_E_CLASSNOTREG错误代码,表示楼主所说的类没注册,楼主还是看一下注册表信息确认一下
lop5712 2003-10-10
  • 打赏
  • 举报
回复
建议楼主还是先将起错误返回代码贴出来,原来楼主说的错误代码应该有问题
///////在98下 hr=-237459404,///////////////////
这个错误代码查不到
mfc168 2003-10-10
  • 打赏
  • 举报
回复
这个就要取决于你的组件是怎么做的,毕竟在2000下做的很多程序,在98下有的就不能运行,而有时候在98下的程序在2000下不能运行,这个道理大家都明白
建议你这样做:
你试着在98下把你的COM组件程序重新写一遍,注册运行,如果出问题,那就是你的程序问题了

在98下的程序如果能正常运行,则找到你两个程序的不同,可以写到一个程序中,定义一个宏,通过GetSystemInfo,判断是什么系统,然后调用你的程序,这样,兼容2000和98,问题就能解决了
zqm1972 2003-10-10
  • 打赏
  • 举报
回复
to mfc168(闶阆) :
我安装了DCOM981.3,但是错误依然存在,而在2000下运行正常,
怎么办啊?
大家再帮帮忙,多谢了!!!!!!!!!
yintongshun 2003-10-10
  • 打赏
  • 举报
回复
安装DCOM98的最新版本,让楼上先抢着说了呵呵
mfc168 2003-10-10
  • 打赏
  • 举报
回复
不是不可用,只是系统可能需要安装一些支持COM组件的服务,在WIN NT 结构下,有一个COM+ Event System服务,就是专门支持COM的,而在98下,没有服务的概念,需要安装一个DCOM98的高版本就可以了,它就是专门的98下的支持COM的服务程序
zqm1972 2003-10-10
  • 打赏
  • 举报
回复
首先感谢大家的救命之恩!!!!
在98下
程序执行到此时
if(SUCCEEDED(hr))
{
...............
............
}
else
{
..................
}
直接跳到else语句里面了

是否可这样理解:
COM在98下不可用呢?
lop5712 2003-10-10
  • 打赏
  • 举报
回复
你真的确信是这个代码 -2147221164既0xF33399BC ???
COM提供的标准错误代码中是没有负数的呀!!

不过如果真的是这个代码那真是抱歉,这样不知发生什么错误,也就不好查了。
楼主可以将你的COM组件的工程和这个客户工程放在同一个工作空间(或解决方案)里,然后在COM组件的实现类的构造函数里下断点。
如果是ATL编的,再在FinalConstruct里下断点,如果程序能到这,那楼主单步执行出FinalConstruct(将会到ATL源码),慢慢查看到底哪出错。
zqm1972 2003-10-10
  • 打赏
  • 举报
回复
TO lop5712(LOP) :
感谢关注!!!


HRESULT hr;
IFirst_ATL *IFirstATL = NULL;

// 初始化COM
hr = CoInitialize(0);

// 使用 SUCCEEDED 宏并检查我们是否能得到一个接口指针
if(SUCCEEDED(hr))
{
hr = CoCreateInstance( CLSID_First_ATL, NULL, CLSCTX_INPROC_SERVER,
IID_IFirst_ATL, (void**) &IFirstATL);

// 如果成功,则调用AddNumbers 方法,否则显示相应的出错信息
在98下 程序执行到这时,hr=-2147221164 然后就跳到ELSE处了
if(SUCCEEDED(hr))
{
long ReturnValue;

IFirstATL->AddNumbers(5, 7, &ReturnValue);
cout << "The answer for 5 + 7 is: "ReturnValue << endl;
IFirstATL->Release();
}
else
{
cout << "CoCreateInstance Failed." << endl;
}
}
// 释放 COM
CoUninitialize();

}


也就是CoCreateInstance返回失败!!!

tank198131 2003-10-09
  • 打赏
  • 举报
回复
在98下提示什么错误,是字符串问题搞得鬼吗,win32和win16和大的区别的。做程序就的需要一些忍耐。
wangweixing2000 2003-10-09
  • 打赏
  • 举报
回复
你把这个com在98和2000下注册表的信息比较一下有什么不同,可能98下注册表找不到CLSID_First_ATL或者有别的写法。
mfc168 2003-10-09
  • 打赏
  • 举报
回复
这个很正常,COM组件技术是在2000后,才真正成熟起来,原来的组件在98下大多采用CORBA的,很明显,在建立实例的时候已经出错了CoCreateInstance,还有你可以试一下安装DCOM98 1、3或更高版本
lop5712 2003-10-09
  • 打赏
  • 举报
回复
楼主看下有没有搞错
///////在98下 hr=-237459404,///////////////////
查不到这个错误代码
zqm1972 2003-10-09
  • 打赏
  • 举报
回复
大家再来帮帮忙啊!
我在等.....................
zqm1972 2003-10-09
  • 打赏
  • 举报
回复
to bluebohe(薄荷):
谢谢!!
我在98下也是用VC编译注册的啊,同2000下用的是同种方法
是不是98和2000下编写COM组件时有什么不同之处啊?

TO : pengliyong(Aply) :
谢谢参与!
不过我现在生死未卜,看来你要稍等了
pengliyong 2003-10-09
  • 打赏
  • 举报
回复
我是来看你被撞死的,在线等待。。。。。
bluebohe 2003-10-09
  • 打赏
  • 举报
回复
多半是你没在98下注册好这个COM组件

3,245

社区成员

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

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