Próbuję wdrożyć IUnknown. Postępowałem zgodnie z instrukcją do tee, ale to nie działa. Kiedy próbuję skompilować uzyskać:Co przesłonić funkcję wirtualną różni się tylko przez wywołanie średniej konwencji?
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
z tym kodem:
#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;
}
};
Komunikat o błędzie oznacza dokładnie to, co mówi. Aby zastąpić funkcję, wszystko musi być identyczne. Ale twoje przesłonięcie nie jest identyczne z funkcją podstawową. Funkcja podstawowa i twoja funkcja mają różne konwencje wywoływania. Napraw funkcję, aby mieć tę samą konwencję wywoływania, co funkcja podstawowa. –
Nie powinieneś zwracać 'S_OK' z tak niepełnej implementacji' QI() '- coś takiego jak' E_FAIL' byłoby znacznie lepsze. – sharptooth