IUnknown'u uygulamaya çalışıyorum. Tişört için talimatı takip ettim ama çalışmıyor. Ben derlemeye çalıştığımda alıyorum:Sanal işlevi geçersiz kılan, yalnızca çağrının anlamı nedir?
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
bu koddan:
#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;
}
};
Hata mesajı, tam olarak ne ifade ettiği anlamına gelir. Bir işlevi geçersiz kılmak için, her şey aynı olmalıdır. Ama geçersiz kılma, temel işlevle aynı değil. Temel işlev ve işleviniz farklı çağrı kurallarına sahiptir. Fonksiyonunuzu, temel işlevle aynı çağrı kuralına sahip olacak şekilde düzeltin. –
"S_OK" ifadesini bu tür tamamlanmamış QI() 'den geri döndürmemelisiniz - E_FAIL gibi bir şey çok daha iyi olurdu. – sharptooth