Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi->C++Builder: Нужно переопределить функцию класса, описанную как HIDESB / 1 сообщений из 1, страница 1 из 1
24.09.2003, 05:59
    #32273557
slydiman
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Delphi->C++Builder: Нужно переопределить функцию класса, описанную как HIDESB
Если в Delphi в описании функции класса нет override, то в C++Builder эта функция помечается как HIDESBASE, точнее __declspec(hidesbase) (по крайней мере в теории, на практике HIDESBASE подставляется если в Delphi указано stdcall). В классе-наследнике создание такой же функции не дает никакого эффекта, вызывается та что в базовом классе.

The hidesbase argument preserves Object Pascal program semantics when porting Object Pascal virtual and override functions to C++Builder. In Object Pascal, virtual functions in base classes can appear in the derived class as a function of the same name, but which is intended to be a completely new function with no explicit relation to the earlier one.
The compilers use the HIDESBASE macro, defined in sysmac.h, to specify that these types of function declarations are completely separate. For example, if a base class T1 declares a virtual function, func, taking no arguments, and its derived class T2 declared a function with the same name and signature, DCC32 -jphn would produce an HPP file with the following prototype:

virtual void T1::func(void);

HIDESBASE void T2::func(void);

Without the HIDESBASE declaration, the C++ program semantics indicate that virtual function T1::func() is being overridden by T2::func().


Конкретная задача: переопределить функции IDispatch в наследнике компонента TOleControl:

Код: plaintext
1.
2.
3.
4.
HIDESBASE HRESULT __stdcall GetTypeInfoCount( /* out */  int &Count);
HIDESBASE HRESULT __stdcall GetTypeInfo(int Index, int LocaleID,  /* out */  void *TypeInfo);
HIDESBASE HRESULT __stdcall GetIDsOfNames(const GUID &IID, void * Names, int NameCount, int LocaleID, void * DispIDs);
HIDESBASE HRESULT __stdcall Invoke(int DispID, const GUID &IID, int LocaleID, Word Flags, void *Params, void * VarResult, void * ExcepInfo, void * ArgErr);


Как это сделать в C++Builder? На Delphi в классе-наследнике эти функции просто заменяются новыми, из которых вызывается inherited, то есть в C++Builder такие функции должны быть virtual.
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Delphi->C++Builder: Нужно переопределить функцию класса, описанную как HIDESB / 1 сообщений из 1, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]