C IUknown_QueryInterface_Proxy 原因 一般保护故障

时间:2021-01-08 16:51:20

标签: c windows com ole

我正在尝试做一些 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 位可执行文件

1 个答案:

答案 0 :(得分:0)

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

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