Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];

Вниз

COM наследование.   Найти похожие ветки 

 
Balu   (2002-08-22 16:18) [0]

Мастера, может кто подскажет примером, как организовать вызов методов предка в интерфейсах если у меня есть наследник от моего же интерфеса. Если непонятно объяснил, Sorry :-(


 
Ученик   (2002-08-22 16:41) [1]

type
IA = interface
procedure A;
end;

TA = class(TInterfacedObject, IA)
procedure A;
end;

IB = interface(IA)
procedure B;
end;

TB = class(TA, IB)
procedure B;
end;

procedure TB.B;
begin
A
end;




 
Balu   (2002-08-22 17:09) [2]

To Ученик
Что то не получается.

IDirectory = interface(IDispatch)
["{FA5CD531-5A43-4B3E-85BB-6B5F778381EC}"]
procedure SetConnection(var Connection: OleVariant); safecall;
end;

IVidSporta = interface(IDirectory)
["{D5CB788E-30DD-4958-A9D5-5096557773B8}"]
function Get_GetRecordSet(const OrderStr: WideString; out Value: OleVariant): HResult; stdcall;
function NewRecord: HResult; stdcall;
function DelRecord: HResult; stdcall;
end;
//------------------------------------------------------
TDirectory = class(TAutoObject, IDirectory)
procedure SetConnection(var Connection: OleVariant); safecall;
end;
TVidSporta = class(TAutoObject, IVidSporta)

// Вот тут и ругается что нужно иметь SetConnection

// procedure SetConnection(var Connection: OleVariant); safecall;

function Get_GetRecordSet(const OrderStr: WideString;
out Value: OleVariant): HResult; stdcall;
function DelRecord: HResult; stdcall;
function NewRecord: HResult; stdcall;
end;

Если снять коментарий с SetConnection, то всё нормально, но как потом вызвать этот SetConnection предка из потомка?


 
Ученик   (2002-08-22 17:13) [3]

TVidSporta = class(TDirectory, IVidSporta)


 
Balu   (2002-08-22 17:29) [4]

Компиляция прошла, УРА.
При использовани
Var
V: OleVariant;
begin
V := CreateOleObject("MyLibrary.VidSporta");

Получаем ERROR: "Invalid class typecast"


 
Ученик   (2002-08-22 17:33) [5]

>Balu © (22.08.02 17:29)
А если V : Variant;


 
Balu   (2002-08-22 17:38) [6]

>Ученик © (22.08.02 17:33)
Error аналогично Balu © (22.08.02 17:29)
:)


 
Balu   (2002-08-22 17:41) [7]

Я понимаю, что удаленным Debug занимаемся, пока, хотелось бы на эту тематику доку найти, а то как слепой котёнок. :(

Не могу найти ничеко в литературе и статьях


 
Romkin   (2002-08-22 17:52) [8]

www.techvanguards.com


 
Ученик   (2002-08-22 18:23) [9]

>Balu © (22.08.02 17:41)
К сожалению, повторить не удается, перерегистрацию пробовали ? или заново создать библиотеку, если конечно не много написано.


 
Balu   (2002-08-22 20:28) [10]

Разобрался :). Огромное спасибо Romkin за ссылку http://www.techvanguards.com/com
Кому интересно вот решение:
type
TVidSporta = class(TAutoObject, IVidSporta, IDirectory)
ADOConnections: TADOConnection;
protected
procedure SetConnection(var Connection: OleVariant); safecall;

function Get_GetRecordSet(const OrderStr: WideString): OleVariant; safecall;
// Добавляем
protected
FInnerDirectory : IDirectory;
function GetInnerDirectory : IDirectory;
property InnerDirectory : IDirectory read GetInnerDirectory implements IDirectory;

end;
function TVidSporta.GetInnerDirectory : IDirectory;
begin
if (FInnerDirectory = NIL) then
FInnerDirectory := CreateComObject (Class_Directory) as IDirectory;
Result := FInnerDirectory;
end;
И вызываем предка
procedure TVidSporta.SetConnection(var Connection: OleVariant); safecall;
Var
Directory: IDirectory;
begin
Directory := GetInnerDirectory;
Directory.SetConnection(Connection);
end;



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2002.09.02;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
4-3663
SeB
2002-06-20 10:59
2002.09.02
Блокировка машины в Windows и неубиваемая программа


1-3370
dim-
2002-08-20 14:55
2002.09.02
что за ошибка?


6-3542
GM_
2002-06-21 23:15
2002.09.02
Как получить маску подсети ?


3-3313
gray_k
2002-08-13 16:20
2002.09.02
проблема с подтверждением кэшированных изменений


14-3617
Fiend
2002-08-08 10:22
2002.09.02
рецепт спохмела





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский