gpt4 book ai didi

windows - 实现 IUnknown,未解析的外部符号

转载 作者:可可西里 更新时间:2023-11-01 10:02:02 25 4
gpt4 key购买 nike

我正在尝试创建一个实现 IUnknown 接口(interface)的类。我在头文件中有以下代码:

#pragma once

#include "stdafx.h"
#include "Unknwn.h"


class Vmr9Presenter : IVMRImagePresenter9, IVMRSurfaceAllocator9
{
public:
Vmr9Presenter(void);
HRESULT Initialize(void);
~Vmr9Presenter(void);
STDMETHODIMP QueryInterface(const IID &riid, void **ppvObject);
};

我已经包含了相关的 uuid.lib 和其他几个。但是,当我尝试编译时,出现错误:

Error 2 error LNK2001: unresolved external symbol "public: virtual long __stdcall Vmr9Presenter::QueryInterface(struct _GUID const &,void * *)" (?QueryInterface@Vmr9Presenter@@UAGJABU_GUID@@PAPAX@Z) Vmr9Presenter.obj VmrPresenter

这让我相信某些东西没有被拉入。关于如何消除这个错误有什么建议吗?

最佳答案

所有 I* 接口(interface)都只是 - 接口(interface)定义。接口(interface)是 C++ 术语中的纯虚拟基类。

当你说:

class Vmr9Presenter : IVMRImagePresenter9, IVMRSurfaceAllocator9

你是说“Vmr9Presenter 类实现了这些接口(interface)”。您还说“Vmr9Presenter 类派生自两个名为 IVMRImagePresenter9 和 IVMRSurfaceAllocator9 的纯虚拟基类。按照惯例,所有接口(interface)都派生自一个名为 IUnknown 的纯虚拟基类。

这意味着您需要在您的对象中实现纯虚拟基类中的所有方法。所以你需要实现IVMRImagePresenter9和IVMRSurfaceAllocator9上的所有方法。您还需要在它们的 基类上实现所有方法,包括 IUnknown。

IUnknown 有 3 个方法:AddRef、Release 和 QueryInterface。您报告的错误表明链接器无法找到名为 Vmr9Presenter::QueryInterface 的函数。

您需要将这样的功能添加到您的类中,一旦您这样做它就应该可以工作。

QI 实现通常如下所示:

HRESULT IVmr9Presenter::QueryInterface(REFIID iid, PVOID *pvInterface)
{
if (pvInterface == NULL)
{
return E_POINTER;
}
*pvInterface = NULL;
if (iid == IID_IUnknown)
{
*pvInterface = static_cast<PVOID>(static_cast<IUnknown *>(this));
return S_OK;
}
if (iid == IID_IVMRSurfaceAllocator9)
{
*pvInterface = static_cast<PVOID>(static_cast<IVMRSurfaceAllocator9*>(this));
return S_OK;
}
:
else
{
return E_NOINTERFACE;
}
}

关于windows - 实现 IUnknown,未解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1416041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com