CIUknown_QueryInterface_Proxy 原因 一般保护故障

C IUknown_QueryInterface_Proxy cause General protection fault

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

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

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