如何从一个组件dll得到它的clsid 刚开始研究com,好多东西都不懂,请教各位大侠如何从一个组件dll得到它的clsid?应该有api函数可以得到它吧? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 HRESULT CLSIDFromProgID(LPCOLESTR lpszProgID, // 指向ProgID的指针LPCLSID pclsid // 指向CLSID的指针);WINOLEAPI ProgIDFromCLSID(REFCLSID clsid, // CLSID 的值,已知LPOLESTR * lplpszProgID // 指向接收ProgID的缓冲区 ); 可以用#import指令,它会自动生成接口文件,clsid都在接口文件里。 对于一个组件来说,其CLSID一般都是知道的,接口ID的通常是知道的,然后QI接口去调用的.很少用自己去获取CLSID的情况!头文件或者import都可以得到CLSID相关信息 myCom.dllIGetRes 接口--Method 1------------------------------------------------------- CoInitialize(NULL); CLSID clsid; CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid); CComPtr<IGetRes> pGetRes;// pGetRes.CoCreateInstance(clsid); pGetRes->Hello(); pGetRes.Release();// CoUninitialize();--Method 2--------------------------------------------------------- CoInitialize(NULL); CLSID clsid; HRESULT hr=CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid); IGetRes *ptr; hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER, __uuidof(IGetRes),(LPVOID*)&ptr); ptr->Hello(); CoUninitialize();--Method 3-------------------------------------------------------- CoInitialize(NULL); HRESULT hr; CLSID clsid; hr=CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid); IGetRes* ptr; IGetResEx* ptrEx; // IClassFactory* p_classfactory; hr=CoGetClassObject(clsid,CLSCTX_INPROC_SERVER, NULL,IID_IClassFactory, (LPVOID*)&p_classfactory); p_classfactory->CreateInstance(NULL,__uuidof(IGetRes), (LPVOID*)&ptr); p_classfactory->CreateInstance(NULL,__uuidof(IGetResEx), (LPVOID*)&ptrEx); ptr->Hello(); ptrEx->HelloEx(); CoUninitialize(); 关键是ProgID的具体值无法确定,这种情况怎么得到clsid 现在就是点击一个组件dll,需要得到它的clsid,才能得到其它的一些信息。 oleview可以看到注册表里面也有 这个要求有些特殊,也就是说这个dll可能还没有注册,或是注册了但目前知道它的位置和文件名,想知道它在注册表中对应于哪些信息。 找到**_i.c,里面可以看到CLSID IID等信息的 有个维持最顶部状态的窗口A,VC如何建立一个窗口在维持在A窗口前面 用CFtpConnection类连接FTP服务器,如何判断已经与服务器断开连接了。。。 再散分 百分送问题,在线等 70,求一份登录窗体!我做了可是不知道为什么不对! vc++高手请进! pop3邮件头suject的译码,汉字怎么能得出来的? a dll based on mfc GDI+ 在图片上怎么作画? 请问谁知道在内存float 、double中符号、指数符、小数位、指数位各占多少位 请帮忙看看代码错在哪里 vc6中如何写自己的类
IGetRes 接口
--Method 1-------------------------------------------------------
CoInitialize(NULL);
CLSID clsid;
CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
CComPtr<IGetRes> pGetRes;//
pGetRes.CoCreateInstance(clsid);
pGetRes->Hello();
pGetRes.Release();//
CoUninitialize();
--Method 2---------------------------------------------------------
CoInitialize(NULL);
CLSID clsid;
HRESULT hr=CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
IGetRes *ptr;
hr=CoCreateInstance(clsid,NULL,CLSCTX_INPROC_SERVER,
__uuidof(IGetRes),(LPVOID*)&ptr);
ptr->Hello();
CoUninitialize();
--Method 3--------------------------------------------------------
CoInitialize(NULL);
HRESULT hr;
CLSID clsid;
hr=CLSIDFromProgID(OLESTR("myCom.GetRes"),&clsid);
IGetRes* ptr;
IGetResEx* ptrEx; //
IClassFactory* p_classfactory;
hr=CoGetClassObject(clsid,CLSCTX_INPROC_SERVER,
NULL,IID_IClassFactory,
(LPVOID*)&p_classfactory);
p_classfactory->CreateInstance(NULL,__uuidof(IGetRes),
(LPVOID*)&ptr);
p_classfactory->CreateInstance(NULL,__uuidof(IGetResEx),
(LPVOID*)&ptrEx);
ptr->Hello();
ptrEx->HelloEx();
CoUninitialize();
现在就是点击一个组件dll,需要得到它的clsid,才能得到其它的一些信息。
注册表里面也有
这个要求有些特殊,也就是说这个dll可能还没有注册,或是注册了但目前知道它的位置和文件名,想知道它在注册表中对应于哪些信息。