有关CLSID

chegtion 2004-10-24 11:12:20
我定义了一个从已有的IXinterface派生的类IMyClass,而且也通过宏
DEFINE_GUID()得到了一个CLSID_MYCLASS,编译通过了。
可是使用这个类的时候,IMyClass *p=NULL ;
p->CoCreateInstanse(CLSID_MYCLASS,.....);
编译却不通过,编译器提示说是无法解析_CLSID_MYCLASS,是不是这个CLSID_MYCLASS我不能随便给?

后来我试了别的方法,不使用DEFINE_GUID,直接调用CLSIDFromProg()来获取CLSID_MYCLASS,可是结果还是不对(一直是GUID_NULL).
我怀疑是不是我的类IMyClass没有做成com,还没有注册,所以得不到他的CLSID?


刚刚学习使用com,请高手们指教!
...全文
357 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
huangxiaoke2000 2004-10-30
  • 打赏
  • 举报
回复
要包含定义CLSID的头文件!
天限天空 2004-10-30
  • 打赏
  • 举报
回复

inclue "xx_x.c"

sinall 2004-10-27
  • 打赏
  • 举报
回复
CLSID 组件和客户程序都需要有定义,而且值必须一样。
组件说,我生成了一个用CLSID_MYCLASS标识的组件
客户说,我需要调用一个名叫CLSID_MYCLASS的组件
于是,暗号对接成功。

至于如何保证两个CLSID_MYCLASS值一致呢,可以让组件和客户程序共用一个CLSID_MYCLASS的声明头文件!也可以抄成两份,总之嘛……^_^
warmchang 2004-10-26
  • 打赏
  • 举报
回复
呵呵,还要在自己的程序中定义CLSID;
步履人生 2004-10-25
  • 打赏
  • 举报
回复
You must get the component's CLSID for CoCreateInstance()'s first parameter.
alon21 2004-10-24
  • 打赏
  • 举报
回复
客户程序是指你调用这个组件的程序.
http://www.vckbase.com/document/viewdoc/?id=916
这篇文章中的做法,
#include "../MathCOM.h"//这里请注意路径
#include "../MathCOM_i.c"//这里请注意路径
就是将在组件中的CLISD定义包含了,
也可以拷贝定义到客户程序.
chegtion 2004-10-24
  • 打赏
  • 举报
回复
我是将IMyClass和别的类封装在一个DLL里面,而且IMyClass只在其中的某个类里使用。
我也在使用的地方定义了CLSID_MYCLASS,可编译还是不通过。
to titilima(李马)(titilima.yeah.net)
所谓的客户程序是指这个DLL吗?还是其它?

还有一个问题:定义这个CLSID_MYCLASS时要注意些什么?
李马 2004-10-24
  • 打赏
  • 举报
回复
客户端程序同样需要定义IMyClass的CLISD的
kkalpha1 2004-10-24
  • 打赏
  • 举报
回复
你可以从VC的tool-->ole/com object viewer 中看看你的com有没有被注册!
如果有注册,找到ProgID="xxxx.xxxx"
#include "../XXXX.h"//这里请注意路径, XXXX是你的COM的头文件
#include "../XXXXi.c"//这里请注意路径

::CoInitialize( NULL );

It1 *MySrv = NULL; //It1 为接口的类名
CLSID csid;
CLSIDFromProgID( OLESTR("xxxx.xxxx""), &csid) //为该接口类的ProgID
if ( FAILED ( ::CoCreateInstance(
csid, NULL,
CLSCTX_INPROC_SERVER,
IID_It1,      // IID_It1为在srv1_i.c中定义的接口ID
(void **) &MySrv)
))
return;
int * re = new int;
MySrv->add(2,6,re);//add 是你的接口中定义的方法
CString s1;
s1.Format("result%d",*re);
::AfxMessageBox(s1);
MySrv->Release();
delete re;
::CoUninitialize();

3,245

社区成员

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

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