C++ 重写虚函数的区别仅仅在于调用约定意味着什么?
我正在努力实施。我按照指示去发球台,但它不起作用。当我尝试编译时,我得到:C++ 重写虚函数的区别仅仅在于调用约定意味着什么?,c++,com,C++,Com,我正在努力实施。我按照指示去发球台,但它不起作用。当我尝试编译时,我得到: Error 2 error C2695: 'testInterfaceImplementation::AddRef': overriding virtual function differs from 'IUnknown::AddRef' only by calling convention c:\users\seanm\desktop\test\test\source.cpp 6 1 test Err
Error 2 error C2695: 'testInterfaceImplementation::AddRef': overriding virtual function differs from 'IUnknown::AddRef' only by calling convention c:\users\seanm\desktop\test\test\source.cpp 6 1 test
Error 3 error C2695: 'testInterfaceImplementation::QueryInterface': overriding virtual function differs from 'IUnknown::QueryInterface' only by calling convention c:\users\seanm\desktop\test\test\source.cpp 14 1 test
Error 4 error C2695: 'testInterfaceImplementation::Release': overriding virtual function differs from 'IUnknown::Release' only by calling convention c:\users\seanm\desktop\test\test\source.cpp 22 1 test
根据该代码:
#include <Windows.h>
#include <tchar.h>
class testInterfaceImplementation : public IUnknown {
protected:
ULONG AddRef()
{
MessageBox(NULL,
_T("TEST1"),
_T("TEST1"),
NULL);
return 0;
}
HRESULT QueryInterface(IN REFIID riid, OUT void **ppvObject)
{
MessageBox(NULL,
_T("TEST2"),
_T("TEST2"),
NULL);
return S_OK;
}
ULONG Release() {
MessageBox(NULL,
_T("TEST3"),
_T("TEST3"),
NULL);
return 0;
}
};
#包括
#包括
类TestInterface实现:public IUnknown{
受保护的:
ULONG AddRef()
{
MessageBox(空,
_T(“测试1”),
_T(“测试1”),
无效);
返回0;
}
HRESULT查询接口(输入refid riid,输出void**ppvObject)
{
MessageBox(空,
_T(“测试2”),
_T(“测试2”),
无效);
返回S_OK;
}
乌龙释放(){
MessageBox(空,
_T(“测试3”),
_T(“测试3”),
无效);
返回0;
}
};
为每个方法添加STDMETHODCALLTYPE
ULONG STDMETHODCALLTYPE AddRef()
HRESULT STDMETHODCALLTYPE QueryInterface(IN REFIID riid, OUT void **ppvObject)
ULONG STDMETHODCALLTYPE Release()
基类(
IUnknown
)方法声明为STDMETHODCALLTYPE
(这是\uu stdcall
的宏)。重写虚拟方法时,它必须具有与原始方法相同的调用约定,在本例中为\uu stdcall
,错误消息的意思与它所说的完全相同。要重写函数,所有内容都必须相同。但是您的覆盖与基本函数不同。基本函数和您的函数具有不同的调用约定。将您的函数修改为与基函数具有相同的调用约定。您不应该从这样不完整的QI()
实现中返回S\u OK
——类似E\u FAIL
的方法会更好。