我注册了一个COM组件.我想打电话给它.
CLSID clsid;
RIID iid;
HRESULT hr = CLSIDFromProgID(OLESTR("se.mysoft"),&clsid);
LPVOID *pRet;
HRESULT hr1 = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, iid, pRet);
Run Code Online (Sandbox Code Playgroud)
我可以获得成功的clsid,但我在哪里可以得到iid?
我用OLE VIEWER查找界面:
[
odl,
uuid(F3F54BC2-D6D1-4A85-B943-16287ECEA64C),
helpstring("Isesoft Interface"),
dual,
oleautomation
]
interface Isesoft : IDispatch {
Run Code Online (Sandbox Code Playgroud)
然后我改变了我的代码:
CLSID clsid;
RIID iid;
IDispatch* pDispatch;
HRESULT hr = CLSIDFromProgID(OLESTR("se.mysoft"),&clsid);
HRESULT hr1 = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, IID_IDispatch,(void **)&pDispatch);
Run Code Online (Sandbox Code Playgroud)
但hr1返回失败.
您的COM类实现了一些接口,每个接口都有其IID标识符.所以你需要从COM组件实现中获取它.这是您的代码,您需要提供准确指定您请求的接口的标识符.
一些COM类实现了众所周知的接口,尤其是.IDispatch,标识符是IID_IDispatch,或__uuidof(IDispatch).
UPD.由于您发现感兴趣的界面是Isesoft,您的代码将是:
CLSID clsid;
RIID iid;
IDispatch* pDispatch;
HRESULT nResult1 = CLSIDFromProgID(OLESTR("se.mysoft"), &clsid);
HRESULT nResult2 = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER,
IID_Isesoft, (void **) &pDispatch);
Run Code Online (Sandbox Code Playgroud)
为了得到Isesoft和IID_Isesoft,__uuidof(Isesoft)提供给C++代码,你将需要导入的定义,这是典型的则上任意两个:
#include "isesoft\sdk.h"#import "libid:..."使用类型库标识符(名称空间和其他属性适用)当您有HRESULT代码指示失败时,请务必发布值.