Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Доступ из DLL, к приложению 
V
    Опции темы
_Dimon_
Дата 27.3.2009, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Как получить доступ из ДЛЛ к обектам которые находятся на форме приложения, которое вызвало эту ДЛЛ (динамически)?
PM MAIL   Вверх
Gradov
Дата 27.3.2009, 23:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 31.10.2006

Репутация: 2
Всего: 3



_Dimon_, 
Передай в экспортируемую функцию в качестве параметра указатель на объект, находящийся на форме приложения. И вызови данную функцию.

Добавлено через 7 минут и 30 секунд
Только формулировка "доступ из ДЛЛ" наверное будет корректна только в том случае если dll многопотоковая. В противном случае вызов функции из dll будет в принципе таким же как и любой функции самого приложения.
PM MAIL   Вверх
_Dimon_
Дата 28.3.2009, 05:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Можно пример, а то с dll работал, но "обратною связь" никогда не использовал

длл не многопоточная, она вызывается как форма для построения отчета

Это сообщение отредактировал(а) _Dimon_ - 28.3.2009, 05:10
PM MAIL   Вверх
Klin
Дата 28.3.2009, 06:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



Буквально вчера днем давал совет по этому поводу. Так как это стандартная операция, то в ней даже ничего интересного нет. На форуме обсуждалось это многократно. Поэтому даю ключевые слова для поиска: dll, GetProcAddress, GetModuleHandle, LoadLibrary, DllEntryPoint.

_Dimon_, я часто говорю сарказмы и т.п., но это абсолютно серьезный совет - купите компьютерную литературу, или используйте интернет для ее поиска. На нашем форуме есть раздел компьютерной литературы, где вы сможете найти для себя много полезной информации. Я не говорю, что не стоит использовать этот раздел форума, если вы напишите свой вопрос, вам конечно на него ответят. Но мне кажется, что хотя бы основы лучше изучить, а если что-то будет не понятно, или возникнет какая-то проблема - то здесь вам помогут.

ps. буквально внизу страницы есть "А здесь смотрели?". Где есть пример: Вставить форму в DLL, не показывая ее и не вызывая


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
_Dimon_
Дата 28.3.2009, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



Klin, не стоит так реагировать, эту  тему (Вставить форму в DLL, не показывая ее и не вызывая) я смотрел но не понял сути.
Давайте задам вопрос по-другому: Как из ДЛЛ изменить, например, Caption формы приложения?


Извините, может я сначала вопрос неправильно сформулировал

Это сообщение отредактировал(а) _Dimon_ - 28.3.2009, 19:28
PM MAIL   Вверх
586
Дата 28.3.2009, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 57
Всего: 146



PM   Вверх
Gradov
Дата 28.3.2009, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 124
Регистрация: 31.10.2006

Репутация: 2
Всего: 3



_Dimon_
Создай новый проект <Dynamic Library> c флажком <Use VCL>, назови test_dll, добавь туда след. код и сделай Build. Должен быть создан файл test_dll.dll. Если файл не создан, то пиши - проверим где ошибка.
Код

//Функция в исходнике DLL
extern "C" __stdcall __declspec(dllexport) void ChangeFormCaption(TForm *form)
{

    form->Caption="Изменено!";
}


Далее создай простое приложение и кнопку на форме. Добавь след. код:
Код

//Приложение вызывающее DLL
.....
typedef void (*MYPROC)(TForm *);
.....
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    HINSTANCE hinstLib;
    MYPROC ProcAdd;
.....
  hinstLib = LoadLibrary("test_dll");
  ProcAdd = (MYPROC) GetProcAddress(hinstLib, "ChangeFormCaption");
  if (ProcAdd!=NULL) ProcAdd(Form1);
  FreeLibrary(hinstLib);
}


Все должно работать. Если нет - пиши, заставим работать.  smile 



Это сообщение отредактировал(а) Gradov - 28.3.2009, 20:30
PM MAIL   Вверх
_Dimon_
Дата 28.3.2009, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 243
Регистрация: 25.6.2007
Где: Украина

Репутация: 1
Всего: 1



586, Gradov, спасибо, это именно то что я искал smile 
PM MAIL   Вверх
Klin
Дата 28.3.2009, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1938
Регистрация: 7.10.2002
Где: Краснодар

Репутация: 20
Всего: 25



_Dimon_, иногда я бываю резок, но я лишь хотел посоветовать, как лучше всего подойти к изучению языка.


--------------------
Я человек - попробуйте обвинить меня за это.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0483 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.