![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
TMemo в DLL [D7, XP]
Novik © (2006-11-28 10:38:00)Как мне сделать DLL, при вызове,в которой срабатывала бы функция создающая (к примеру) Memo на основной форме приложения (Как написать DLL и как вызывать я разобрался)
В эту функция однозначно что-то надо передавать: хендл формы или указатель на неё. Так вот что именно надо передавать и как это потом использовать не знаю .... поделитесь советом плз ... люди добрые! :)
clickmaker (2006-11-29 11:58:00) [1]
> [37] Сергей М. © (29.11.06 11:56)
ну так "на то в реке и щука, чтоб карась не дремал" )
Сергей М. (2006-11-29 11:56:00) [2]
> передавать в DLL не указатели на классы, а хэндлы окон
Здесь ждет засада : хост-приложение вправе передать хэндл "чужого" окна или же своего, но созданного в ином код.потоке, нежели поток в котором вызвана dll-функция, призванная создать окно
Novik (2006-11-29 11:56:00) [3]ну есть у меня такая идея - передавать хендл. но чем CreateParented отличается от простого Create ?
clickmaker (2006-11-29 11:52:00) [4]еще один путь к универсальности - передавать в DLL не указатели на классы, а хэндлы окон, HWND
Тогда дельфовое приложение может сделать CreateParented, ну а сишное, к примеру просто CreateWindow
Novik (2006-11-29 11:43:00) [5]спасибо. получил исчерпывающие ответ ....
Gydvin (2006-11-29 10:28:00) [6]
> это как ?
Shift+delete.
А если в dll реализовывать не компоненты, а скажем модули целиком. Потом передовать в длл значения для обработки, обрабатывать уже на форме из длл, и возвращать обратно в основную программу. Это как подключаемые модули в фотошопе.
Anatoly Podgoretsky (2006-11-29 10:25:00) [7]> Novik (29.11.2006 10:15:31) [31]
> это как
А это точно также как с длл, OldDll=NewDll, OldExe=NewExe
Но никакого DLL ада
Сергей М. (2006-11-29 10:15:00) [8]
> Novik (29.11.06 10:11) [28]
> к чему мы можем придти ?
К тому что конкретно поставленная тобой задача реализуема лишь при разработке взаимодействующих модулей не иначе как в Делфи/ВСВ. Ты в этом убедился.
Как только вместо Делфи (или ВСВ) начинает фигурировать любая иная среда, решение задачи теряет всякий смысл, не говоря уже о ее решаемости в том или ином хотя бы ограниченном виде
Novik (2006-11-29 10:15:00) [9]>> А удалить exe религия не позволяет?
это как ?
Anatoly Podgoretsky (2006-11-29 10:13:00) [10]> Novik (29.11.2006 10:08:26) [26]
Надоело, решил потрахаться, заодно пусть и пользователи помучаются.
А удалить exe религия не позволяет?
Novik (2006-11-29 10:11:00) [11]так, если объединить все разговоры выше, к чему мы можем придти ???? как начинать "стройку", какой фундамент "ложить"???
Сергей М. (2006-11-29 10:10:00) [12]
> передает ей что-то
В твоем случае - это "что-то" должно быть указателем на объект класса TForm.
Но никто кроме Делфи и ВСВ об этом классе ничего не знает.
Novik (2006-11-29 10:08:00) [13]просто сколько я не делал приложения, всегда приходилось вносить в него коррективы (по надобности, со временем). надоело мне постоянно перекомпилировать всё это добро, вот я и решил организовать работу программы за счет подключаемых модулей. Удобно: надобность в одной функции программы отпала - удали ДЛЛ, надо что-то новое, напиши ДЛЛ и кинь в папку
Сергей М. (2006-11-29 10:07:00) [14]
> тогда как мне реализовать хост приложение?
Вот так как ты его сейчас реализовал, так и реализуй - ведь работает же ! А лучшее, как известно, - враг хорошего)..
> Для меня самое главное взаимодействие данных DLL между собой
> и хост приложением
До тех пор, пока речь идет об одинаковых средах разработки взаимодействующих модулей, нет никаких проблем в достижении этой цели. И ты в этом убедился.
представь себе, что твоя "стандартная" DLL-функция объявлена так:
function CreateMemo(ParentForm: TForm): Boolean;
Что сишное хост-приложение будет делать с этой ф-цией ? Оно же понятия не имеет, что такое TForm ! Равно как не имеет понятия о Делфи-классах вообще !
Anatoly Podgoretsky (2006-11-29 10:06:00) [15]> Novik (29.11.2006 09:59:19) [19]
Указатели на что, не говори загадками.
Но вижу у тебя большое желание походить по граблям, тем более не понимая, что это грабли.
Барабан на шею, палочки в руки и вперед.
Anatoly Podgoretsky (2006-11-29 10:04:00) [16]> Сергей М. (29.11.2006 09:56:17) [17]
Что другая программа будет делать с С++ классом?
Anatoly Podgoretsky (2006-11-29 10:04:00) [17]> Novik (29.11.2006 09:53:15) [15]
Можно, только зачем для этого ДЛЛ
Чтобы потрахаться?
Anatoly Podgoretsky (2006-11-29 10:03:00) [18]> Novik (29.11.2006 09:48:13) [13]
Для запуска программы никаких предустановленных библиотек (VCL) не требуется
Требования простые чистый Си
Anatoly Podgoretsky (2006-11-29 10:02:00) [19]> Novik (29.11.2006 09:46:12) [12]
А очень просто, не использовать ничего кроме Pure C для передачи данных туда и обратно, а если еще и для Фортрана, то вообще ничего кроме указателей.
Novik (2006-11-29 09:59:00) [20]>>Что С++-программа будет делать с Делфи-классом ?
>>Это же совершенно разные среды программирования ...
согласен, но ведь можно реализовать дельфи класс внутри DLL (описать его и т.д.) а основному приложению пофиг - она вызывает функцию, к примеру, InitDLL передает ей что-то, та сама всё делает и передает одратно что-то (это что-то я собирался реализовывать через указатели)