gpt4 book ai didi

c++ - 如何使用 CoCreateInstance() 获取 com 对象?

转载 作者:可可西里 更新时间:2023-11-01 18:35:57 24 4
gpt4 key购买 nike

我已经注册了一个 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 类实现了一些接口(interface),每个接口(interface)都有其 IID 标识符。所以您需要从您的 COM 组件实现中获取它。这是您的代码,您需要提供标识符来准确指定您请求的接口(interface)。

一些 COM 类实现众所周知的接口(interface),尤其是。 IDispatch,其标识符为 IID_IDispatch,或 __uuidof(IDispatch)

更新。由于您发现感兴趣的接口(interface)是 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);

要使 IsesoftIID_Isesoft__uuidof(Isesoft) 可用于 C++ 代码,您需要导入定义,这通常是两者之一:

  • 其他供应商 SDK 包括,例如#include "isesoft\sdk.h"
  • #import "libid:..."具有类型库标识符(命名空间和其他属性适用)

当您有 HRESULT 代码指示失败时,请确保发布这些值。

关于c++ - 如何使用 CoCreateInstance() 获取 com 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18590499/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com