Главная страница
    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.054 c
1-3383
Lendl
2002-08-22 10:06
2002.09.02
Координаты X и Y текущего положения окна на экране?


14-3629
Axel
2002-08-05 12:26
2002.09.02
Galileo, Delphi for .NET


1-3515
AlexBeliy
2002-08-21 15:11
2002.09.02
Создание новой формы


3-3231
chistyakov
2002-08-09 16:40
2002.09.02
Десятичное число в dbf


1-3493
CCCatch
2002-08-21 12:03
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
Английский Французский Немецкий Итальянский Португальский Русский Испанский