访问COM接口方法C ++

时间:2009-01-09 07:10:23

标签: c++ com oleview

这两种:

  • CLSID
  • IID

指定了上述内容,并使用:

  • 的CoCreateInstance()

返回上面CLSID指定的类的未初始化对象。

如何从C ++访问Interface的方法? 无:

  • ATL
  • MFC
  • 简单的C ++

之后,我使用CreateInstance()

我遇到了麻烦,使用CreateInstance() - 最后一个参数 - ppv

使用oleview,我可以看到上面指定的IID over IID的方法,例如:

interface IS8Simulation : IDispatch {
    HRESULT Open([in] BSTR FileName);
};

如何才能访问上述内容?示例/指导 - 请

此致

4 个答案:

答案 0 :(得分:5)

通过执行CoCreateInstance,您将获得一个接口指针。通过QueryInterface(...)方法,您可以轻松获取其他界面的界面指针。 例如。,


IUnknown* pUnk = NULL;
HRESULT hr = ::CoCreateInstance(clsid,NULL,CLSCTX_ALL,__uuidof(IUnknown),(void**)&pUnk);

IS8Simulation* pSim = NULL; hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void**)&pSim);

执行此操作后,您将在pSim中获得指向IS8Simulation的指针,通过该指针可以调用该接口的方法。请记住,您需要在CoCreateInstance调用中提供有效的clsid。

答案 1 :(得分:0)

实际问题是什么有点模糊。一些代码会有所帮助。但是要猜测,你需要QueryInterface吗?

答案 2 :(得分:0)

 IS8Simulation* pSim = NULL;
 hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void)&pSim);

我会尝试上述内容,但是IS8模仿声明了 - 请原谅我缺乏 COM 理解

此外,如何使用 plain C ++

调用下面的方法
HRESULT Open([in] BSTR FileName)

答案 3 :(得分:0)

你可能想要#import“something.dll”。这将为您提供类似IS8Simulation类型的C ++声明,类似于#include“something.h”所做的。