紧急求助CLSID 怎样获得一个未注册的com dll的CLSID,已知该com组件只有一个CLSID,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 注册一下就知道了使用CLSIDFromProgID、CLSIDFromProgIDEx函数 是啊 不注册你的com有用吗? 1、注册该组件2、从注册表查出它的CLSID3、反注册该组件4、把查到的CLSID写死到自己的代码中 我是想在注册之前,就得到组件的CLSID,判断这个clsid是否已经存在,如果不存在就用程序给注册,否则要给出提示,目前需求就是这样,谢谢! 可以采用如下方法判断某个组件是否注册: 通过组件的ProgID从注册表获取CLSID,如果CLSID为空,则表示该组件未注册。 本帖最后由 tttyd 于 2010-03-18 13:26:30 编辑 是啊 你先注册,得ProgID。然后你再CLSIDFROMPROGID 看能不能得CLSID就可以了。。 同意5楼观点,或者用LoadTypeLib从DLL中来获取 tttyd说的方法,我清楚,但目前不能这样做,我这边就要求只有一个com组件dll文件,还有一个tlb文件,不能注册,就要得到com对象的CLSID,谢谢! ITypeLib* pItypelib = NULL; hr = ::LoadRegTypeLib(LIBID_ATLLIBLib,1,0,0,&pItypelib); if (SUCCEEDED(hr)) { ITypeInfo * ptinfo = NULL; hr = pItypelib->GetTypeInfoOfGuid(CLSID_LibAdd,&ptinfo); pItypelib->Release();不知道ITypeLib 这样获得CLSID? 呵呵可以了CoInitialize(0); HRESULT hr; ITypeLib* pItypelib = NULL; hr = ::LoadTypeLib("Filepath",&pItypelib); if (SUCCEEDED(hr)) { ITypeInfo * ptinfo = NULL; hr = pItypelib->GetTypeInfoOfGuid(CLSID_LibAdd,&ptinfo); pItypelib->Release(); if (SUCCEEDED(hr)) { TYPEATTR * ptypeat= NULL; ptinfo->GetTypeAttr((TYPEATTR**)&ptypeat); GUID m_clsid=ptypeat->guid; 用资源工具打开com dll,然后rgs资源提取出来,如果有rgs资源的话,一般都有CLSID SullenSun的回答,接近了我想要的结果,只是不知道CLSID_LibAdd是怎么来的? 好像使用CLSIDFromProgID、CLSIDFromProgIDEx函数就可以! 只知道动态库组件的路径和名字,没有注册,ProgID从哪里来? 不好意思 写错了CoInitialize(0);HRESULT hr;ITypeLib* pItypelib = NULL;hr = ::LoadTypeLib("Filepath",&pItypelib);if (SUCCEEDED(hr)){ TLIBATTR * LPtlib= NULL; pItypelib->GetLibAttr((TLIBATTR **)&LPtlib); GUID g2 =LPtlib->guid;} 我晕,楼主在钻牛角尖,一个COM的CLSID是固定的,随便找个方法人工取得就足够了,然后写到代码里去测试这个CLSID是不是能创建组件,为什么一定要到用户机器上用代码获取?难道同一个DLL在不同机器上的CLSID不一样?有点自找麻烦。 楼上的各位辛苦了,SullenSun的方法得到是组件类型库的id,不是com对象的clsid! 楼主再试一试CoInitialize(0);HRESULT hr;ITypeLib* pItypelib = NULL;hr = ::LoadTypeLib("Filepath",&pItypelib);if (SUCCEEDED(hr)){ITypeInfo * ptinfo = NULL;hr = pItypelib->GetTypeInfo(0,&ptinfo);pItypelib->Release();if (SUCCEEDED(hr)){TYPEATTR * ptypeat= NULL;ptinfo->GetTypeAttr((TYPEATTR**)&ptypeat);GUID m_clsid=ptypeat->guid;}} 谢谢SullenSun,你非常的聪明,你解决了我的问题,也感谢那些说我钻牛角尖的朋友们,需求就那样,我们搞技术的也没有办法,谢谢大家! _w64 起什么作用 求助!如何判断两副bitmap是否相同? 关于线程中接收事件消息的问题 Oracle一个存储过程怎么也编译不通过(数据库高手请进)?郁闷中 谁有用vc开发数据库的经验与体会 这个打开数据库语句有何错误?老是说:'Open' : function does not take 4 parameters shell 扩展 执行过程 求助:串口需要哪种类型的钩子,谢谢! 时间控件问题 类似这样的矩形检测怎么做,opencv 如何实现Tab控件上两个对话框的控件之间相互赋值 MFC 中CWnd* pParent的使用问题?
2、从注册表查出它的CLSID
3、反注册该组件
4、把查到的CLSID写死到自己的代码中
通过组件的ProgID从注册表获取CLSID,如果CLSID为空,则表示该组件未注册。
然后你再CLSIDFROMPROGID 看能不能得CLSID就可以了。。
同意5楼观点,或者用LoadTypeLib从DLL中来获取
hr = ::LoadRegTypeLib(LIBID_ATLLIBLib,1,0,0,&pItypelib);
if (SUCCEEDED(hr))
{
ITypeInfo * ptinfo = NULL;
hr = pItypelib->GetTypeInfoOfGuid(CLSID_LibAdd,&ptinfo);
pItypelib->Release();
不知道ITypeLib 这样获得CLSID?
CoInitialize(0);
HRESULT hr;
ITypeLib* pItypelib = NULL;
hr = ::LoadTypeLib("Filepath",&pItypelib);
if (SUCCEEDED(hr))
{
ITypeInfo * ptinfo = NULL;
hr = pItypelib->GetTypeInfoOfGuid(CLSID_LibAdd,&ptinfo);
pItypelib->Release();
if (SUCCEEDED(hr))
{
TYPEATTR * ptypeat= NULL;
ptinfo->GetTypeAttr((TYPEATTR**)&ptypeat);
GUID m_clsid=ptypeat->guid;
CoInitialize(0);
HRESULT hr;
ITypeLib* pItypelib = NULL;
hr = ::LoadTypeLib("Filepath",&pItypelib);
if (SUCCEEDED(hr))
{
TLIBATTR * LPtlib= NULL;
pItypelib->GetLibAttr((TLIBATTR **)&LPtlib);
GUID g2 =LPtlib->guid;
}
CoInitialize(0);
HRESULT hr;
ITypeLib* pItypelib = NULL;
hr = ::LoadTypeLib("Filepath",&pItypelib);
if (SUCCEEDED(hr))
{
ITypeInfo * ptinfo = NULL;
hr = pItypelib->GetTypeInfo(0,&ptinfo);
pItypelib->Release();
if (SUCCEEDED(hr))
{
TYPEATTR * ptypeat= NULL;
ptinfo->GetTypeAttr((TYPEATTR**)&ptypeat);
GUID m_clsid=ptypeat->guid;}}