Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.22;
Скачать: CL | DM;

Вниз

Плагины на основе Интерфейсов   Найти похожие ветки 

 
Sashka   (2008-11-06 17:57) [0]

Загрузчик плагинов - Visual C++
Я пишу плагин на Delphi
И вот столкнулся  с непонятным мне вопросом
Хм..
Реализовывал плагин на основе плагина на Visual C++

Пример кода ниже ....
IP1 = interface
 function A1: HResult; stdcall;
end;

IP2 = interface (IP1)
 function A2 : Hresult; stdcall;
end;

TMyClass = class (TintrefacedObject, IP2)
  function A1: HResult; stdcall;
  function A2: HResult; stdcall;
end;

Написал реализацию класса и вот трабл после запуска.
У меня идет наследование интерфейсов от IInterface
Чего нет в коде Visual C++
И соответственно VMT которую получает Загрузчик сдвинута на методы QueryInterface... _AddRed _Release

Не пойму как бороться с данным косяком ???

точнее пришлось сделать IP1 и IP2 как абстрактные классы.


 
@!!ex ©   (2008-11-06 19:02) [1]

Вообще то реализация классов в С++ и Дельфи отличаются.


 
Сергей М. ©   (2008-11-06 20:05) [2]


> пришлось сделать IP1 и IP2 как абстрактные классы


Это как ?


 
tesseract ©   (2008-11-06 20:56) [3]


> Не пойму как бороться с данным косяком ???


Это не косяк. Это реализация tObject. А Com плагино-держатель не держит ?


 
Sashka   (2008-11-06 21:36) [4]

Вот так

IP1 = class
function A1: HResult; virtual; stdcall; absract;
end;

IP2 = class (IP1)
function A2 : Hresult; virtual; stdcall; absract;
end;

TMyClass = class IP2)
 function A1: HResult; override; stdcall;
 function A2: HResult; override stdcall;
end;


 
Сергей М. ©   (2008-11-06 21:42) [5]


> Sashka   (06.11.08 21:36) [4]


Это не абстрактный класс, это просто некий класс, содержащий кроме прочих абстрактные методы.

см. [3]


 
Sashka   (2008-11-06 21:49) [6]

Хорошо...
Но исходя из идеологии менеджера плагинов

Я должен реализовать следующую экспортируемую функцию в своем плагине

function LoadPlugin (var A : IP2) : HRESULT;
begin
  A := TMyCLass.Create;
  Result := S_Ok;
end;

при этом я так понимаю что обработчик не правильно анализирует VMT потому что вызываются в моем плагине методы со сдвигом

и выход из этого:

function LoadPlugin (var A : Pointer) : HRESULT;
begin
  A := Pointer(TMyCLass.Create);  // где TMyClass=class (IP2)
  Result := S_Ok;
end;

Пож-ста, поясните что необходимо понять из [3] ?


 
Сергей М. ©   (2008-11-07 00:01) [7]


> исходя из идеологии менеджера плагинов


Что за идеология такая ?
Мне таковая не известна.
Сколько разработчиков - столько и  "идеологий".

Изложи ее абсолютные постулаты, если ты уверен в ином ..

Далее:


> A := TMyCLass.Create;


и


> A := Pointer(TMyCLass.Create)


- оба варианта ничем не отличаются


> что необходимо понять из [3] ?


Для начала приведи ключевые фрагменты С-кода заведомо работоспособного С-плагина.. И укажи что за программный продукт "требует" интересующую тебя плагин-технологию


 
Германн ©   (2008-11-07 01:10) [8]


> Сергей М. ©   (07.11.08 00:01) [7]
>
>
> > исходя из идеологии менеджера плагинов
>
>
> Что за идеология такая ?

+1

<offtop>
"Идеология плагинов" уже меня достала!
Не очень давно меня уже спрашивали как реализовать сию идеологию, чтобы программа работающая с БД могла с помощью плагинов работать с любым движком БД.
ЖЗЧ - Must Die!


 
KSergey ©   (2008-11-07 10:00) [9]

Автор, приведите как интерфейс плагина выглядит на стороне С++


 
Sashka   (2008-11-07 17:59) [10]

Приблизительно вот так

// PS_CALLTYPE   __stdcall;
// PS_CALL   - Hresult;  __stdcall;

interface NOVTABLE IP1
{
virtual ULONG PS_CALLTYPE AddRef() PURE;
virtual ULONG PS_CALLTYPE Release() PURE;
};

interface NOVTABLE IP2 : public IP1
{
       virtual PS_CALL Serialize() PURE;
};

interface NOVTABLE IP3 : public IP2
{
virtual PS_CALL QueryInfo() PURE;
};

Далее одна экспортируемая функция

LoadPlugin (OUT IP3** ppvPlugin);


 
Eraser ©   (2008-11-07 18:15) [11]

> [10] Sashka   (07.11.08 17:59)

это ни о чем не говорит, покажите код объявления интерфейса.


 
Johnmen ©   (2008-11-09 02:23) [12]


> Sashka   (07.11.08 17:59) [10]
> Приблизительно вот так

Тебя интересуют приблизительные ответы?



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

Текущий архив: 2009.11.22;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.018 c
1-1225744534
AlexN
2008-11-03 23:35
2009.11.22
Контейнер для файлов


15-1250101749
alvonen
2009-08-12 22:29
2009.11.22
Кодовые страницы символов и Юникод


15-1254132717
@!!ex
2009-09-28 14:11
2009.11.22
Подскажите примеров по кодированию буффера из WAV в mp3, wma, ogg


1-1216636968
apic
2008-07-21 14:42
2009.11.22
Перемещение ярлыков


15-1253883582
fics)
2009-09-25 16:59
2009.11.22
Программа прозвонки