COM问题,高手请进,免灌水

mty 2001-05-28 03:35:00
我用vc ATL编写了一个COM服务器软件,并成功注册.
客户端如下调用.

HRESULT hr = CoInitilize(NULL);
if (FAILED(hr)) //无错误
{
return;
}
IMyInterface pInfo=NULL;
hr = CoCreateInstance(CLSID_TestCom,
NULL,
CTX_ALL,
NULL,
(void **) &pInfo);
if (FAILED(hr))
{
//这里报错,用GetLastError()返回错误码83
return;
}
pInfo->MyMethod();

...全文
189 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
mty 2001-07-12
  • 打赏
  • 举报
回复
结吧
jazzrabbit 2001-06-04
  • 打赏
  • 举报
回复
to vcmfc:
"COM出错根本不能用getlasterror()"是不对的.

因为,如果在HRESULT_FACILITY(hr)返回是FACILITY_WINDOWS或FACILITY_WIN32,GetLastError()就是可以用的。

winerror.h中定义的HRESULT_FROM_WIN32(hr)可以得到-32k->+32K之间的errorcode值.但如果超过了这个范围的话(如果是用户的SetLastError设定值),还是得用GetLastError()的.
mty 2001-06-04
  • 打赏
  • 举报
回复
ok!
mty 2001-06-04
  • 打赏
  • 举报
回复
sam1111 2001-06-04
  • 打赏
  • 举报
回复
IMyInterface pInfo=NULL;
应为一个指针:IMyInterface *pInfo=NULL;
CoCreateInstance写成下面这样:
hr = CoCreateInstance(CLSID_TestCom,
NULL,
CTX_INPRO_SERVER,
IID_XXX,//为接口ID
reinterpret_cast<void **>(&pInfo));
再试!
jazzrabbit 2001-06-04
  • 打赏
  • 举报
回复
更正:
winerror.h中得到win errorcode的值应用HRESULT_CODE(hr)宏.hresult_from_win32(ec)是用errorcode来形成hr
mty 2001-05-30
  • 打赏
  • 举报
回复
to vcmfc(菜虫)
谢谢你的诚恳,我回答如下:
-----------------------------
1,写错了,不好意思。
2,第四个参数是(类似)IID_MyInterface,第三个参数我改成个CLSCTX_INPROC_SERVER,
不过还是不行
3,谢谢你的指导
zheng_rui 2001-05-29
  • 打赏
  • 举报
回复
先用IUnknown 实施
liu_feng_fly 2001-05-29
  • 打赏
  • 举报
回复
guanzhu
jazzrabbit 2001-05-29
  • 打赏
  • 举报
回复
_com_error ce(hr);
ATLTRACE(ce.ErrorMessage());
看看返回什么错误信息(GetLastError()不一定管用).
mty 2001-05-29
  • 打赏
  • 举报
回复
换成CLSCTX_INPROC_SERVER,我试了,也不行,报同样的错
不过谢谢各位
vcmfc 2001-05-29
  • 打赏
  • 举报
回复
一看你的程序,就知道你没有认真去看书或写代码!,评价如下:

1.CoInitialize写成CoInitilize,

2.hr = CoCreateInstance(CLSID_TestCom,
NULL,
CTX_ALL,
NULL,
(void **) &pInfo);
没有接口ID????,还有为什么用CTX_ALL,为何不用CLSCTX_INPROC_SERVER?????


3.COM出错根本就不能用GetLastError(),如何你在COM没有支持ISupportErrorInfo接口的话,你返回的错误码有价值吗?(你能看懂吗?)
kalling 2001-05-29
  • 打赏
  • 举报
回复
IUnknown得的到吗?
Xmotion 2001-05-29
  • 打赏
  • 举报
回复
到底是83 还是183?
mty 2001-05-29
  • 打赏
  • 举报
回复
to jazzrabbit(爵士兔)
我试一下,明天再来,敬请关注
to MicroAngel(MicroAngel) 
我用了,成功调用,但后面的就不行了

看是不是跟系统有关,譬如环境。
那位高手编程时也遇到过类似问题?
MicroAngel 2001-05-29
  • 打赏
  • 举报
回复
有没先对函数CoInitializeEx或CoInitialize调用呢,先要对COM库进行初始化
ookaiii 2001-05-28
  • 打赏
  • 举报
回复
你怎么用GetLastError()?难道hr(HRESULT)不是用来返回函数的执行状态?
我想你应该把CTX_ALL,换乘CLSCTX_INPROC_SERVER,...在式一下!!
mty 2001-05-28
  • 打赏
  • 举报
回复
谢谢各位,CoCreateInstance的第四个参数是类似IID_TestCom的东东。
另外,我的环境是Win98.(我暂时没装MSDN,不过我用GetLastError()返回值是183,我查了一下
error.h,好象是ERROR_ALREADY_EXISTS)
linghuye 2001-05-28
  • 打赏
  • 举报
回复
CoCreateInstance(CLSID_TestCom, NULL, CTX_ALL, NULL, (void **) &pInfo);
第四个参数可以是NULL吗?应该是你的 接口ID 吧?默认???

devouer 2001-05-28
  • 打赏
  • 举报
回复
用MSDN查看一下是什么错误吗?也不就是集合,接口不存在...等等几个
加载更多回复(2)

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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