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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2012, 07:21   #1
Balabek
Пользователь
 
Аватар для Balabek
 
Регистрация: 14.12.2010
Сообщений: 20
По умолчанию Использование классов

Всем, привет!
Я создал класс, который работает прекрасно для одного приложения в котором я его создаю (в Visual C++). Создал Example.h и Example.cpp. Как сделать? чтобы при написании следующего приложения я мог просто включить Example.h и класс заработал?
Проблема в том, что я создал класс в одном приложении и точно такой же в другом. Одно приложение записывает объект класса в файл (напр. example.dat), а второе не может считать этот объект из указанного выше файла.
Заранее благодарю!
Balabek вне форума Ответить с цитированием
Старый 17.09.2012, 10:11   #2
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

а на код посмотреть можно?
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.
kineziz вне форума Ответить с цитированием
Старый 17.09.2012, 10:17   #3
Granus
С++
Форумчанин
 
Аватар для Granus
 
Регистрация: 22.09.2008
Сообщений: 791
По умолчанию

Видимо, две реализации немного отличаются. Вы можете просто подключать файл реализации (Example.cpp) к проекту, он скомпилируется вместе с другими исходниками и все будет хорошо. Вы также можете отдельно прекомпилировать его в объектный файл или в библиотеку и использовать потом в других программах уже без необходимости компилировать. Ну и наконец Вы можете вынести класс в отдельную динамическую библиотеку и использовать в обеих программах.
Форматируйте код, будьте людьми.
Granus вне форума Ответить с цитированием
Старый 17.09.2012, 12:13   #4
Balabek
Пользователь
 
Аватар для Balabek
 
Регистрация: 14.12.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Granus Посмотреть сообщение
Видимо, две реализации немного отличаются. Вы можете просто подключать файл реализации (Example.cpp) к проекту, он скомпилируется вместе с другими исходниками и все будет хорошо. Вы также можете отдельно прекомпилировать его в объектный файл или в библиотеку и использовать потом в других программах уже без необходимости компилировать. Ну и наконец Вы можете вынести класс в отдельную динамическую библиотеку и использовать в обеих программах.
Спасибо за помощь. Вроде реализации одинаковые, т.к. я использую один и тот же файл .cpp. В данный момент как раз занимаюсь созданием .dll.

Скажите, пожалуйста как вынести класс в dll. Запарился ), не получается. Обычные функции могу, а как сделать это с классом. Где добавлять extern "C" _declspec(dllexport)?

Последний раз редактировалось Stilet; 17.09.2012 в 17:54.
Balabek вне форума Ответить с цитированием
Старый 17.09.2012, 17:14   #5
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,331
По умолчанию

class _declspec(dllexport) CMyClass { ... };
Кроме того можно перед каждым методом в cpp файле.
waleri вне форума Ответить с цитированием
Старый 17.09.2012, 20:42   #6
kineziz
Форумчанин
 
Регистрация: 22.12.2011
Сообщений: 378
По умолчанию

Удобнее всего работать с классом из DLL по подобию COM. Т.е. создаете абстрактный класс(интерфейс), в DLL делаете еще один класс наследуете функции интерфейса, реализуете их.

В функции DllMain выделяете память под указатель на объект класса и экспортируете функцию которая записывает адрес объекта (грубо говоря) в переданный ей указатель.

Осталось только явно загрузить DLL и получить адрес экспортируемой функции и вот все в принципе.

Почитайте про COM-объекты и явную загрузку DLL
Большинство хороших программистов делают свою работу не потому, что ожидают оплаты или признания, а потому что получают удовольствие от программирования.

Последний раз редактировалось kineziz; 17.09.2012 в 20:45.
kineziz вне форума Ответить с цитированием
Старый 18.09.2012, 15:05   #7
Balabek
Пользователь
 
Аватар для Balabek
 
Регистрация: 14.12.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от waleri Посмотреть сообщение
class _declspec(dllexport) CMyClass { ... };
Кроме того можно перед каждым методом в cpp файле.
Рахмет! Работеает. Даже перед методами не надо ставить. Теперь буду свой верблюд программировать ))
Balabek вне форума Ответить с цитированием
Старый 18.09.2012, 15:06   #8
Balabek
Пользователь
 
Аватар для Balabek
 
Регистрация: 14.12.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от kineziz Посмотреть сообщение
Удобнее всего работать с классом из DLL по подобию COM. Т.е. создаете абстрактный класс(интерфейс), в DLL делаете еще один класс наследуете функции интерфейса, реализуете их.

В функции DllMain выделяете память под указатель на объект класса и экспортируете функцию которая записывает адрес объекта (грубо говоря) в переданный ей указатель.

Осталось только явно загрузить DLL и получить адрес экспортируемой функции и вот все в принципе.

Почитайте про COM-объекты и явную загрузку DLL
Про СОМ-объекты надо бы мне мат часть подучить ) Спасибо!
Balabek вне форума Ответить с цитированием
Старый 24.09.2012, 09:39   #9
Balabek
Пользователь
 
Аватар для Balabek
 
Регистрация: 14.12.2010
Сообщений: 20
По умолчанию

Всем, очередной привет!
Как использовать одну реализацию класса, я разобрался )) И сузил неполадки в проем приложении. Ошибка происходит при чтении из файла объекта класса. Т.е. я записываю с помощью WriteFile() объект своего класса в файл, потом считываю из файла с помощью ReadFile. Призавершении программы происходит ошибка. В классе есть элемент-данные, память под которые выделяется из кучи с помощью HeapAlloc(). Если я уберу из деструктора HeapFree(), то все работает нормально, если оставлю то ошибка доступа.
Кто сможет мне помочь?
Balabek вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование классов SoftKoc Свободное общение 5 11.02.2011 20:05
С++ использование классов moron Помощь студентам 3 06.04.2010 00:30
С++ использование классов moron Общие вопросы C/C++ 0 03.04.2010 22:40
Создание классов и использование объектов классов при написании программ в среде C++. Frozen inside Помощь студентам 0 16.04.2009 23:18