What distinguishes a virtual function from another?

I am trying to implement IUnknown . I followed the instructions on the tee, but it does not work. When I try to compile, I get:

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 

from this code:

 #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; } }; 
+8
c ++ com
source share
1 answer

Add STDMETHODCALLTYPE for each of the methods.

 ULONG STDMETHODCALLTYPE AddRef() HRESULT STDMETHODCALLTYPE QueryInterface(IN REFIID riid, OUT void **ppvObject) ULONG STDMETHODCALLTYPE Release() 

Base class methods ( IUnknown ) are declared as STDMETHODCALLTYPE (which is the macro for __stdcall ). When you override a virtual method, it must have the same calling convention as the original, which in this case is __stdcall

+16
source share

All Articles