Вот пример, IUnknown интерфейс из Unknown.h
в Windows SDK:
IUnknown {
public:
virtual HRESULT STDMETHODCALLTYPE QueryInterface(
REFIID riid,
void** ppvObject) = 0;
//AddRef
//Release
};
typedef struct IUnknownVtbl {
HRESULT (STDMETHODCALLTYPE *QueryInterface)(
IUnknown* This,
REFIID riid,
void **ppvObject);
//AddRef
//Release
} IUnknownVtbl;
interface IUnknown {
CONST_VTBL IUnknownVtbl* lpVtbl;
};
Вы можете увидеть STDMETHODCALLTYPE
перед виртуальными функциями, которые __stdcall
(как правило).Итак, мой вопрос, важно ли упоминать соглашения о вызовах в чисто виртуальных функциях?Или соглашения о вызовах управляются внутри виртуальных функций с помощью параметров компилятора или компилятора (например, /Gz
для __stdcall
)?
Также, когда я не упоминаю никаких соглашений о вызовах перед виртуальными функциями в исходном коде (или с помощьюлюбой вариант компилятора), исполняемый файл работает нормально.