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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

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

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

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

Всем, привет!
Я создал класс, который работает прекрасно для одного приложения в котором я его создаю (в Visual C++). Создал Example.h и Example.cpp. Как сделать? чтобы при написании следующего приложения я мог просто включить Example.h и класс заработал?
Проблема в том, что я создал класс в одном приложении и точно такой же в другом. Одно приложение записывает объект класса в файл (напр. example.dat), а второе не может считать этот объект из указанного выше файла.
Заранее благодарю!
Balabek вне форума Ответить с цитированием
Старый 14.09.2012, 15:59   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
а второе не может считать
Так может стоит разобраться почему не читает?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.09.2012, 23:13   #3
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
Создал Example.h и Example.cpp. Как сделать? чтобы при написании следующего приложения я мог просто включить Example.h и класс заработал?
компилируем cpp в либу, и подключаем её.
или же сам cpp, чтото с кодом все равно должно быть.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 17.09.2012, 08:16   #4
Balabek
Пользователь
 
Аватар для Balabek
 
Регистрация: 14.12.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
компилируем cpp в либу, и подключаем её.
или же сам cpp, чтото с кодом все равно должно быть.
Спасибо за помощь. Я проверял код вроде все в норме потому как со структурой такой код работает, а вот с моим классном нет )

Код:
 //BusyDriver.h
class BusyDriver
{
public:
	BusyDriver(wchar_t* tmpDriverName=L" ",wchar_t* tmpStatus=L"free",wchar_t* tmpDeparture=L" ",
		wchar_t* tmpPredictionArrival=L" ",wchar_t* tmpDestination=L" ",wchar_t* tmpSenderName=L" ",wchar_t* tmpArrival=L" ");
	~BusyDriver();

	void SetDriverName(wchar_t* tmpDriverName);
	void SetStatus(wchar_t* tmpStatus);
	void SetDeparture(wchar_t* tmpDeparture);
	void SetPredictionArrival(wchar_t* tmpPredictionArrival);
	void SetDestination(wchar_t* tmpDestination);
	void SetSenderName(wchar_t* tmpSenderName);
	void SetArrival(wchar_t* tmpArrival);

	wchar_t* GetDriverName();
	wchar_t* GetStatus();
	wchar_t* GetDeparture();
	wchar_t* GetPredictionArrival();
	wchar_t* GetDestination();
	wchar_t* GetSenderName();
	wchar_t* GetArrival();

private:
	wchar_t* driverName;
	wchar_t status[10];
	wchar_t departure[8];
	wchar_t predictionArrival[8];
	wchar_t* destination;
	wchar_t* senderName;
	wchar_t arrival[8];
};

//BusyDriver.cpp
#include<windows.h>
#include<windowsx.h>
#include"BusyDriver.h"

BusyDriver::BusyDriver(wchar_t* tmpDriverName,wchar_t* tmpStatus,wchar_t* tmpDeparture,
		wchar_t* tmpPredictionArrival,wchar_t* tmpDestination,wchar_t* tmpSenderName,wchar_t* tmpArrival)
{
	SetDriverName(tmpDriverName);
	SetStatus(tmpStatus);
	SetDeparture(tmpDeparture);
	SetPredictionArrival(tmpPredictionArrival);
	SetDestination(tmpDestination);
	SetSenderName(tmpSenderName);
	SetArrival(tmpArrival);
}

void BusyDriver::SetDriverName(wchar_t* tmpDriverName)
{
	driverName=new wchar_t[wcslen(tmpDriverName)+1];
	wcscpy(driverName,tmpDriverName);

}

void BusyDriver::SetStatus(wchar_t* tmpStatus)
{
	wcscpy(status,tmpStatus);
}

void BusyDriver::SetDeparture(wchar_t* tmpDeparture)
{
	wcscpy(departure,tmpDeparture);
}

void BusyDriver::SetPredictionArrival(wchar_t* tmpPredictionArrival)
{
	wcscpy(predictionArrival,tmpPredictionArrival);
}

void BusyDriver::SetDestination(wchar_t* tmpDestination)
{
	destination=new wchar_t[strlen((char*)tmpDestination)+1];
	wcscpy(destination,tmpDestination);
}

void BusyDriver::SetSenderName(wchar_t* tmpSenderName)
{
	senderName=new wchar_t[wcslen(tmpSenderName)+1];
	wcscpy(senderName,tmpSenderName);
}

void BusyDriver::SetArrival(wchar_t* tmpArrival)
{
	wcscpy(arrival,tmpArrival);
}


wchar_t* BusyDriver::GetDriverName()
{
	return driverName;
}

wchar_t* BusyDriver::GetStatus()
{
	return status;
}

wchar_t* BusyDriver::GetDeparture()
{
	return departure;
}

wchar_t* BusyDriver::GetPredictionArrival()
{
	return predictionArrival;
}

wchar_t* BusyDriver::GetDestination()
{
	return destination;
}

wchar_t* BusyDriver::GetSenderName()
{
	return senderName;
}

wchar_t* BusyDriver::GetArrival()
{
	return arrival;
}

BusyDriver::~BusyDriver(){
	delete [] driverName;
	delete [] destination;
	delete [] senderName;
}

Последний раз редактировалось Stilet; 17.09.2012 в 08:28.
Balabek вне форума Ответить с цитированием
Старый 17.09.2012, 15:04   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

а как чтение/запись происходит?

сохраняете
Код:
wchar_t* driverName;
	wchar_t status[10];
	wchar_t departure[8];
	wchar_t predictionArrival[8];
	wchar_t* destination;
	wchar_t* senderName;
	wchar_t arrival[8];
в файл.
потом читаете их из файла и вызываете конструктор
Код:
BusyDriver * bd = new BusyDriver(tmpDriverName, tmpStatus, tmpDeparture, tmpPredictionArrival, tmpDestination, tmpSenderName, tmpArrival);
?

ps. конструктор тот еще, конечно.

Последний раз редактировалось f.hump; 17.09.2012 в 15:07.
f.hump вне форума Ответить с цитированием
Старый 19.09.2012, 08:32   #6
Balabek
Пользователь
 
Аватар для Balabek
 
Регистрация: 14.12.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от f.hump Посмотреть сообщение
а как чтение/запись происходит?

сохраняете
Код:
wchar_t* driverName;
	wchar_t status[10];
	wchar_t departure[8];
	wchar_t predictionArrival[8];
	wchar_t* destination;
	wchar_t* senderName;
	wchar_t arrival[8];
в файл.
потом читаете их из файла и вызываете конструктор
Код:
BusyDriver * bd = new BusyDriver(tmpDriverName, tmpStatus, tmpDeparture, tmpPredictionArrival, tmpDestination, tmpSenderName, tmpArrival);
?

ps. конструктор тот еще, конечно.
Да с конструктором я "постарался" ))
В первом приложении я создаю объект и с помощью WriteFile записываю его в файл .dat Затем в другом приложении пытаюсь его считать с помощью ReadFile.
Balabek вне форума Ответить с цитированием
Старый 24.09.2012, 09:41   #7
Balabek
Пользователь
 
Аватар для Balabek
 
Регистрация: 14.12.2010
Сообщений: 20
По умолчанию

Всем, очередной привет!
Как использовать одну реализацию класса, я разобрался )) И сузил неполадки в проем приложении. Ошибка происходит при чтении из файла объекта класса. Т.е. я записываю с помощью WriteFile() объект своего класса в файл, потом считываю из файла с помощью ReadFile. Призавершении программы происходит ошибка. В классе есть элемент-данные, память под которые выделяется из кучи с помощью HeapAlloc() (поменял new и delete на HeapAlloc и HeapFree). Если я уберу из деструктора HeapFree(), то все работает нормально, если оставлю то ошибка доступа.
Кто сможет мне помочь?
Balabek вне форума Ответить с цитированием
Старый 24.09.2012, 09:54   #8
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Надеюсь вы записываете не указатели в файл, а то, что по ним...
p51x вне форума Ответить с цитированием
Старый 24.09.2012, 15:47   #9
Balabek
Пользователь
 
Аватар для Balabek
 
Регистрация: 14.12.2010
Сообщений: 20
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Надеюсь вы записываете не указатели в файл, а то, что по ним...
Я записываю объект моего класса, а в нем есть элемент данные указатели (выше я приводил код своего класса). А что так не заработает? А если нет, то почему?
Balabek вне форума Ответить с цитированием
Старый 24.09.2012, 18:58   #10
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,706
По умолчанию

Мда... Подумайте сами, вот вы записали указатель 0x40000000, где у вас была строка. Потом загружаете объект с этим указателем и ..? Какие у вас гарантии, что вам выделят этот кусок, кто туда строку положит, ... ?
p51x вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Конструктор класса не хочет принимать в качестве параметра адрес объекта другого класса Jugger Помощь студентам 3 05.01.2012 04:10
Определение типа класса по переменной на объект этого класса при компиляции phomm Общие вопросы Delphi 24 08.04.2011 14:11
Нахождение наибольшего общего делителяНахождение наибольшего общего делителя A_Orlov Паскаль, Turbo Pascal, PascalABC.NET 1 27.04.2010 16:53
нахождение наибольшего общего делителя и наименьшего общего кратного made in russia Помощь студентам 2 21.12.2008 23:36
Правильная организация класса для работы с таблицей mysql Choo PHP 10 08.08.2008 08:55