Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Передача объекта в dll

5.4K
19 мая 2005 года
Loki&Co
10 / / 15.04.2004
Ситуация следующая: есть приложение, которое вызывает формы, находящиеся в разных dll. Из одной формы в другую необходимо передать объект класса. Можно передавать указатель на этот объект, но в таком случае, при закрытии первой формы память очистится, и во второй вместо объекта получаем глюки. Передавать сам объект компилятор не дает, выдает ошибку при создании объекта, что нужно использовать new и т.д. Как же все-таки поступить?
259
19 мая 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by Loki&Co
Ситуация следующая: есть приложение, которое вызывает формы, находящиеся в разных dll. Из одной формы в другую необходимо передать объект класса. Можно передавать указатель на этот объект, но в таком случае, при закрытии первой формы память очистится, и во второй вместо объекта получаем глюки. Передавать сам объект компилятор не дает, выдает ошибку при создании объекта, что нужно использовать new и т.д. Как же все-таки поступить?


В обоих формах создайте указатели на объект. Передайте указатель из формы в форму и используйте метод Assign для получения копии объекта.

5.4K
19 мая 2005 года
Loki&Co
10 / / 15.04.2004
Цитата:
Originally posted by AlexandrVSmirno
В обоих формах создайте указатели на объект. Передайте указатель из формы в форму и используйте метод Assign для получения копии объекта.



Написал следующее:
mainform->Doc = new TDocument(mainform);
mainform->Doc->Assign((TDocument *)DataEx);

DataEx - указатель типа void*, в котором хранится адрес. Возникает ошибка: "Cannot assign a TDocument to a TDocument". С чем это может быть связано?
P.S. Класс TDocument - пользовательский и наследуется от TComponent.

259
19 мая 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by Loki&Co
Написал следующее:
mainform->Doc = new TDocument(mainform);
mainform->Doc->Assign((TDocument *)DataEx);

DataEx - указатель типа void*, в котором хранится адрес. Возникает ошибка: "Cannot assign a TDocument to a TDocument". С чем это может быть связано?
P.S. Класс TDocument - пользовательский и наследуется от TComponent.



Вам необходимо тогда определить метод Assign для класса TDocument. Поскольку метод у вас определен только для родительского класса и не знает, что и куда ему копировать.

5.4K
19 мая 2005 года
Loki&Co
10 / / 15.04.2004
Цитата:
Originally posted by AlexandrVSmirno
Вам необходимо тогда определить метод Assign для класса TDocument. Поскольку метод у вас определен только для родительского класса и не знает, что и куда ему копировать.



Ага, я уже понял. Плохая привычка сначала спрашивать, а потом думать самому :) Спасибо.

488
19 мая 2005 года
Mоngооsе
465 / / 01.04.2005
А не лучше создать объект в основной форме и dll-ам только передавать указатель на этот объект?

При создании объекта действительно нужно использовать new. Напр.
TComponent *comp = new TComponent(this);
259
19 мая 2005 года
AlexandrVSmirno
1.4K / / 03.12.2004
Цитата:
Originally posted by Loki&Co
Ага, я уже понял. Плохая привычка сначала спрашивать, а потом думать самому :) Спасибо.


А почему бы Вам не сделать этот объект глобальным, а в dll потом использовать FindComponent(AnsiString Name);?

285
19 мая 2005 года
Romik
479 / / 24.11.2002
Я в своём проекте избрал несколько иной путь. У меня в главной программе ничего не известно о формах, просто в каждой DLL есть функция, которая принимает параметры для форма, создаёт форму и возвращает результат. Обмен данными идёт через объeкт. За уничтожения объёкта отвечает вызывающий. Правда у меня много диалогов и я стараюсь строить выстаривать логику программы таким образом, что бы не они не закрывались преждевременно. Вот
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог