Передача объекта в dll
Ситуация следующая: есть приложение, которое вызывает формы, находящиеся в разных dll. Из одной формы в другую необходимо передать объект класса. Можно передавать указатель на этот объект, но в таком случае, при закрытии первой формы память очистится, и во второй вместо объекта получаем глюки. Передавать сам объект компилятор не дает, выдает ошибку при создании объекта, что нужно использовать new и т.д. Как же все-таки поступить?
В обоих формах создайте указатели на объект. Передайте указатель из формы в форму и используйте метод Assign для получения копии объекта.
В обоих формах создайте указатели на объект. Передайте указатель из формы в форму и используйте метод Assign для получения копии объекта.
Написал следующее:
mainform->Doc = new TDocument(mainform);
mainform->Doc->Assign((TDocument *)DataEx);
DataEx - указатель типа void*, в котором хранится адрес. Возникает ошибка: "Cannot assign a TDocument to a TDocument". С чем это может быть связано?
P.S. Класс TDocument - пользовательский и наследуется от TComponent.
Написал следующее:
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. Поскольку метод у вас определен только для родительского класса и не знает, что и куда ему копировать.
Вам необходимо тогда определить метод Assign для класса TDocument. Поскольку метод у вас определен только для родительского класса и не знает, что и куда ему копировать.
Ага, я уже понял. Плохая привычка сначала спрашивать, а потом думать самому :) Спасибо.
При создании объекта действительно нужно использовать new. Напр.
TComponent *comp = new TComponent(this);
Ага, я уже понял. Плохая привычка сначала спрашивать, а потом думать самому :) Спасибо.
А почему бы Вам не сделать этот объект глобальным, а в dll потом использовать FindComponent(AnsiString Name);?