Tôi đang cố triển khai IUnknown. Tôi làm theo hướng dẫn cho tee nhưng nó không hoạt động. Khi tôi cố gắng biên soạn tôi nhận được:Chức năng ghi đè ảo nào khác chỉ bằng cách gọi quy ước có nghĩa là gì?
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
từ mã này:
#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;
}
};
Thông báo lỗi có nghĩa là chính xác những gì nó nói. Để ghi đè hàm, mọi thứ phải giống hệt nhau. Nhưng ghi đè của bạn không giống với hàm cơ sở. Hàm cơ sở và hàm của bạn có các quy ước gọi khác nhau. Sửa hàm của bạn để có cùng quy ước gọi là hàm cơ sở. –
Bạn không nên trả về 'S_OK' từ việc thực thi' QI() 'chưa hoàn chỉnh - một thứ như' E_FAIL' sẽ tốt hơn nhiều. – sharptooth