我做了一个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(); }为什么啊?
帮帮我,我还不想死
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(); }为什么啊?
帮帮我,我还不想死
谢谢!!
我在98下也是用VC编译注册的啊,同2000下用的是同种方法
是不是98和2000下编写COM组件时有什么不同之处啊?TO : pengliyong(Aply) :
谢谢参与!
不过我现在生死未卜,看来你要稍等了
在98下
程序执行到此时
if(SUCCEEDED(hr))
{
...............
............
}
else
{
..................
}
直接跳到else语句里面了是否可这样理解:
COM在98下不可用呢?
我安装了DCOM981.3,但是错误依然存在,而在2000下运行正常,
怎么办啊?
大家再帮帮忙,多谢了!!!!!!!!!
建议你这样做:
你试着在98下把你的COM组件程序重新写一遍,注册运行,如果出问题,那就是你的程序问题了在98下的程序如果能正常运行,则找到你两个程序的不同,可以写到一个程序中,定义一个宏,通过GetSystemInfo,判断是什么系统,然后调用你的程序,这样,兼容2000和98,问题就能解决了
感谢关注!!!
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返回失败!!!
COM提供的标准错误代码中是没有负数的呀!!不过如果真的是这个代码那真是抱歉,这样不知发生什么错误,也就不好查了。
楼主可以将你的COM组件的工程和这个客户工程放在同一个工作空间(或解决方案)里,然后在COM组件的实现类的构造函数里下断点。
如果是ATL编的,再在FinalConstruct里下断点,如果程序能到这,那楼主单步执行出FinalConstruct(将会到ATL源码),慢慢查看到底哪出错。
不太懂COM,觉得至少应该先分析是FirstAtl组件问题还是这个CoCreateInstance调用参数问题吧