Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Общие вопросы по программированию, компьютерный форум
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2011, 12:22   #1
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию Плагины на C++ для программы на delphi. Это возможно?

Доброго времени суток!

Допустим программа предостовляет некий модуль с интерфейсами для создания плагина.

На delphi, просто воткнул pas файл и программируй сколько влезет.

Что делать, когда плагин хочет реализовать человек, который не знает Delphi, но знает C++?
Человек_Борща вне форума Ответить с цитированием
Старый 20.12.2011, 12:31   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Писать длл.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 20.12.2011, 14:16   #3
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Что делать, когда плагин хочет реализовать человек, который не знает Delphi, но знает C++?
делать через DLL, плюс правильная огранизация программы
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 20.12.2011, 14:30   #4
xwicked
Участник клуба
 
Аватар для xwicked
 
Регистрация: 21.03.2010
Сообщений: 1,508
По умолчанию

Исходя из своего опыта экспериментирования с dll(C++) и вызова в Lazarus и Delphi, то могу предположить, что это не только возможно, но и ничего сложного при реализации быть не должно
Google - лучший помощник программиста.
---
моя лаборатория | мой FaceBook
xwicked вне форума Ответить с цитированием
Старый 20.12.2011, 18:44   #5
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Цитата:
Сообщение от haruhi Посмотреть сообщение
делать через DLL, плюс правильная огранизация программы
Был такой вариант...

Но тут тонна вопросов.

DLL(пускай PluginAPI.dll) всего в одном экземпляре.
Плагинов неопределённое количество. Dll не может быть перезагружена для каждого плугина отдельно. НО можно из программы передавать указатель на АП этой dll -> КАК?

Далее DLL реализует некий IMainInterface, если писать только делфи плагин(соответсвенно интерфейс ввиде pas есть), то плагин наследует интерфейс, создавая его копию:
Код:
Type
  IPluginSmthDo=Interface(IMainInterface,IInterface,IInterfacedObject)
и в последствии, dll как плагин, передает в программу 1 экспортируюмую функцию, которая передаёт осн. программе указатель на созданный плагином интерфейс.

Разме можно так зделать из DLL?
Создать несколько наследуемых интерфейсов и как-то чтоли перадать их самим DLL плагинам.
Человек_Борща вне форума Ответить с цитированием
Старый 20.12.2011, 18:57   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

что такое АП?
Цитата:
Dll не может быть перезагружена для каждого плугина отдельно.
причем тут ДЛЛ и плагин?
плагин в ДЛЛ, а не приложение.
Цитата:
Разме можно так зделать из DLL?
интерфейс можно.

можете посмотреть в сторону COM, чем не плагины.
либо свою структуру функций, как например в Миранде(раньше точно, сейчас не знаю), она передает указатель на функцию, через которую плагин взаимодействует с приложением.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.12.2011, 19:09   #7
haruhi
Форумчанин
 
Аватар для haruhi
 
Регистрация: 05.10.2011
Сообщений: 368
По умолчанию

самый простой вариант: программа это EXE, плагины это DLL.
программа загружает плагин после чего вызывает какие-то там функции из DLL, одна из этих функций в DLL будет называться SetProgramAPI, программа вызывает эту функцию и передаёт ей указатели на свои функции, через которые DLL будет взаимодействовать с программой.
Не стоит будить спящего Бога! (с) Меланхолия Харухи Судзумии
haruhi вне форума Ответить с цитированием
Старый 20.12.2011, 21:17   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Что делать, когда плагин хочет реализовать человек, который не знает Delphi, но знает C++?
То же самое, что и на Delphi - человек пишет DLL, которая удовлетворяет контракту плагина. Соответственно, чтобы он мог это сделать, контракт плагина должен оперировать межязыковыми сущностями, избегая использования привязанных к Delphi типов (String, TObject, register и т.п.). Вот и всё.

Ну и конечно, ты должен документировать способ общения (контракт). В частности, если для Delpi ты предоставляешь заголовочные .pas файлы, то для C++ ты также должен предоставлять заголовочники (.h). Которые получаются просто переводом .pas -> .h (и м.б. .cpp).

Цитата:
DLL(пускай PluginAPI.dll) всего в одном экземпляре.
Плагинов неопределённое количество. Dll не может быть перезагружена для каждого плугина отдельно.
Зачем каждому плагину нужно "отдельно"? Ведь тогда они не будут связаны. Как раз смысл в том, что PluginAPI.dll - одна. Каждый плагин просто намертво завязан на неё (не суть важно - через статический импорт или LoadLibrary).

Цитата:
НО можно из программы передавать указатель на АП этой dll -> КАК?
Не уловил, зачем это надо, но проблем не вижу. Плагин выставляет наружу функцию инициализации? Выставляет. Вот в неё ядро может передать что угодно.

Цитата:
Разме можно так зделать из DLL?
В чём проблема-то? Всё, что может делать .exe, может делать и DLL, и наоборот.

Цитата:
Далее DLL реализует некий IMainInterface, если писать только делфи плагин(соответсвенно интерфейс ввиде pas есть), то плагин наследует интерфейс, создавая его копию:
Код:
Type
  IPluginSmthDo=Interface(IMainInterface,IInterface,IInterfacedObject)
На C++ будет точно так же. Только на C++

Цитата:
в последствии, dll как плагин, передает в программу 1 экспортируюмую функцию, которая передаёт осн. программе указатель на созданный плагином интерфейс.
Не увидел, в чём тут проблема с DLL.

"передаёт экспортируемую функцию" надо понимать как "ничего никому не передаёт, а экспортирует, кому надо - сам возьмёт".

Иными словами, если .exe делает:
Код:
PlugDLL := LoadLibrary('plugin1.dll');
InitFunc := GetProcAddress(PlugDLL, 'Init');
то нет никаких причин, почему этот же код не может выполнить DLL.

Цитата:
плагин в ДЛЛ, а не приложение
Ты не понял. Он хотел API ядра в DLL выделить.

Цитата:
Создать несколько наследуемых интерфейсов и как-то чтоли перадать их самим DLL плагинам.
А это я уже не понял.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 20.12.2011, 21:25   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Ты не понял. Он хотел API ядра в DLL выделить.
бывает, бывает.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 20.12.2011, 21:37   #10
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
избегая использования привязанных к Delphi типов (String,
Стандартный юнит ДЛЛ в Дельфи 7 насчет String так и пишет (в комментах) и предлагает для этого использовать костыли.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
создание программы на Delphi (возможно за вознаграждение) pr9n9 Фриланс 10 14.03.2011 13:17
Плагины для gta-vc? VintProg Gamedev - cоздание игр: Unity, OpenGL, DirectX 16 27.06.2010 10:18
подключение к Excel из delphi через ODBC.возможно ли это без глюков? betirsolt БД в Delphi 0 13.06.2010 01:05
Автосохранение исходников в Delphi. Это возможно? Kottik Софт 16 20.09.2009 17:36