1

两个都:

  • CLSID
  • 独立身份证

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

  • 协同创建实例()

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

然后如何从 C++ 访问接口的方法?没有:

  • ATL
  • MFC
  • 只是普通的 C++

之后,我使用 CreateInstance()

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

使用oleview,可以看到上面指定的IIDabove IID的方法,比如:

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

我怎样才能访问上述内容?示例/指导 - 请

问候

4

4 回答 4

6

通过执行 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。

于 2009-01-09T07:20:57.943 回答
0

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

于 2009-01-09T07:19:47.273 回答
0
 IS8Simulation* pSim = NULL;
 hr = pUnk->QueryInterface(__uuidof(IS8Simulation), (void)&pSim);

我会尝试上述方法,但是否声明了 IS8Simulation - 请原谅我缺乏对COM的理解

此外,如何使用普通 C++调用该方法:

HRESULT Open([in] BSTR FileName)
于 2009-01-09T10:17:25.903 回答
0

您可能想要#import "something.dll"。这将为您提供像 IS8Simulation 这样的类型的 C++ 声明,类似于 #include "something.h" 会做的事情。

于 2009-01-09T15:36:29.993 回答