【问题标题】:C IUknown_QueryInterface_Proxy cause General protection faultC IUknown_QueryInterface_Proxy 原因 一般保护故障
【发布时间】:2021-04-14 09:39:17
【问题描述】:

我正在尝试做一些 COM/OLE,这是我的代码:

static struct IUnknown* punk = NULL;
static IDispatch* UIRManager = NULL;

void DispatcherStart(){
    CoInitialize(NULL);
    HRESULT retour = GetActiveObject(&CLSID_OASIQ_,NULL,&punk);
     if(retour != S_OK){
        return;
    }
    HRESULT hr = IUnknown_QueryInterface_Proxy(punk,&IID_UIRManager_,(void**) &UIRManager); // General protection fault
...

由于某种原因,IUnknown_QueryInterface_Proxy 会导致一般保护错误。我看不出我做错了什么?

这个函数是从与主线程不同的线程调用的,但由于我调用了 CoInitialize,所以它不是错误的原因。我在 C99 上编译 W10 上的 32 位可执行文件

【问题讨论】:

  • ` IUnknown_QueryInterface_Proxy` 供代理使用。您没有代理。

标签: c windows com ole


【解决方案1】:

IUnknow 的 C 实现不同于 C++。 调用 QueryInterface 的常用方法不是使用 IUnknown_QueryInterface_Proxy(来自 RpcRT4.lib),而是这样做:

HRESULT hr =  (punk)->lpVtbl -> QueryInterface(punk,&IID_UIRManager_,(void**) &UIRManager);

【讨论】:

  • Unknwn.h 确实为(大多数)接口的方法定义了 IUnknown_QueryInterface 宏。
  • @SimonMourier 在我的 IDE 中找不到名为 IUnknown_QueryInterface 的函数。我在 c99 上使用旧的 CLANG 版本。也许这就是为什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-08
  • 2013-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-23
  • 2011-06-26
相关资源
最近更新 更多