В частности есть такой класс:
- Код: Выделить всё
#ifndef __cplusplus
typedef struct tagPROTO_INTERFACE_VTBL
{
HANDLE ( *AddToList )( struct tagPROTO_INTERFACE*, int flags, PROTOSEARCHRESULT* psr );
//куча ссылок на функции
}
PROTO_INTERFACE_VTBL;
#endif
typedef struct tagPROTO_INTERFACE
{
#ifndef __cplusplus
PROTO_INTERFACE_VTBL* vtbl;
#endif
int m_iStatus,
//другие поля
#ifdef __cplusplus
virtual HANDLE __cdecl AddToList( int flags, PROTOSEARCHRESULT* psr ) = 0;
//еще куча чисто виртульных методов
#endif
}
PROTO_INTERFACE;
Можно заметить что tagPROTO_INTERFACE_VTBL - это как раз таблица виртуальных методов. На сколько это совместимо в FPC если я буду писать примерно так:
- Код: Выделить всё
TPROTO_INTERFACE = object
iStatus :int;
//остальные поля
function AddToList (flags:int; var psr:TPROTOSEARCHRESULT):THANDLE; cdecl; virtual; abstract;
//остальные методы
end;
наследовать этот объект, и передавать ссылку на потомка в с++ ный код. Сработает?