我已经注册了一个COM组件。我想调用它。
CLSID clsid;
RIID iid;
HRESULT hr = CLSIDFromProgID(OLESTR("se.mysoft"),&clsid);
LPVOID *pRet;
HRESULT hr1 = CoCreateInstance(clsid, NULL, CLSCTX_INPROC_SERVER, iid, pRet);
我可以成功获取 clsid ,但是在哪里可以获取 iid ?
我用OLE VIEWER查找界面:
[
odl,
uuid(F3F54BC2-D6D1-4A85-B943-16287ECEA64C),
helpstring("Isesoft Interface"),
dual,
oleautomation
]
interface Isesoft : IDispatch {
然后我改变了我的代码:
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);
但hr1返回失败。
你的COM类实现了一些接口,每个接口都有它的IID
标识符。因此您需要从 COM 组件实现中获取它。这是您的代码,您需要提供准确指定您请求的接口的标识符。
一些 COM 类实现了众所周知的接口,特别是。IDispatch
,其标识符是IID_IDispatch
, or __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);
To get Isesoft
and IID_Isesoft
, __uuidof(Isesoft)
对于 C++ 代码来说,您需要导入定义,通常是以下两个之一:
- 其他供应商 SDK 包括例如
#include "isesoft\sdk.h"
- or #import "libid:..." http://msdn.microsoft.com/en-us/library/8etzzkb6.aspx带有类型库标识符(命名空间和其他属性适用)
当你有HRESULT
指示失败的代码,请务必发布值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)