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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.05.2010, 19:49   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Преобразования типа LPCSTR -> int без потери данных

Доброго времени суток уважаемые форумчане!
Собственно возникла следующая проблема, при компилирование программы (обратите внимание на выделенный кусок кода красным цветом AddZen() ), компилятор начинает возникать: error C2664: gObj_Write: невозможно преобразовать параметр 3 из 'LPCSTR' в 'long int'
Собственно как можно будет красиво преобразовать чтобы не потерять данные lpBuffer
Я пытался сделать следующие gObj_Write(PlayerID, gObjZen, gObj_GetInt(PlayerID, gObjZen) + (int)lpBuffer);
- проблема пропадает но lpBuffer теряет своё значение, так как получает int'вскую размерность

Код:
void gObj_Write (int PlayerID, int gObjParam, long int Value);

void gObj_Write (int PlayerID,int gObjParam,long int Value)
{
	*(long int*)(PlayerID * gObjSize + gObjOffset + gObjParam) = Value;
}
Код:
void AddZen(DWORD PlayerID, LPCSTR lpBuffer)
{ 
	int MoneyLimit = 2000000000, AddLimit = 99999999;

	short int AddZenEnabled = GetPrivateProfileInt("AddZen", "AddZenEnabled", 1, ".\\Commands.ini");
	short int AddZenOnlyGameMaster = GetPrivateProfileInt ("AddZen", "AddZenOnlyGameMaster", 1, ".\\Commands.ini");
	
	gObj_GetNick(PlayerID, Character);

	if (AddZenEnabled == 0)
	{ GCServerMsgStringSend("Command \"/addzen\" disabled", PlayerID, 1); return; }
		
	if (AddZenOnlyGameMaster == 1 && VerifyGameMaster(PlayerID) == TRUE)
	{ GCServerMsgStringSend("Command \"/addzen\" available only for GameMaster", PlayerID, 1); return; }

	if(!_strcmpi("/addzen", lpBuffer))
	{ GCServerMsgStringSend("The syntax \"/addzen\" messages is not correct", PlayerID, 1); return; }

	if(strlen(lpBuffer) <= 0)
	{ GCServerMsgStringSend("The syntax \"/addzen\" messages is not correct", PlayerID, 1); return; }

	if (atoi(lpBuffer) > AddLimit)
	{ GCServerMsgStringSend("Limit is set to 99.999.999 zen", PlayerID,1); return; }

	if ((int)gObj_GetInt(PlayerID, gObjZen) > MoneyLimit)
	{ GCServerMsgStringSend("Your inventory may not exceed more than 2.000.000.000 zen", PlayerID, 1); return; }

	gObj_Write(PlayerID, gObjZen, gObj_GetInt(PlayerID, gObjZen) + lpBuffer); 
	GCMoneySend(PlayerID, gObj_GetInt(PlayerID, gObjZen));
}
coNsept вне форума Ответить с цитированием
Старый 20.05.2010, 20:41   #2
evgn
Разрабатываюсь....
Пользователь
 
Регистрация: 16.11.2008
Сообщений: 68
По умолчанию

Красиво будет использовать функцию для преобразования строки в число, типа atol.
Например так:
Код:
gObj_Write(PlayerID, gObjZen, gObj_GetInt(PlayerID, gObjZen) + atol(lpBuffer));
Если конечно gObj_GetInt() возвращает число
evgn вне форума Ответить с цитированием
Старый 20.05.2010, 20:49   #3
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Ух какой я счастлив, всё замечательно работает, спасибо evgn :D :D :D

Последний раз редактировалось coNsept; 20.05.2010 в 20:59.
coNsept вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ресайз PNG без потери прозрачности RidDozZ Мультимедиа в Delphi 2 01.08.2012 13:40
Добавление FieldDefs в ClientDataSet без потери записей shock-in Общие вопросы Delphi 1 04.12.2009 01:18
Убрать точки без потери данных king13 Microsoft Office Excel 4 07.10.2009 13:54
Копирование таблицы без потери форматирования k1r1ch Microsoft Office Excel 3 09.07.2009 11:00
Обновление списка данных без потери данных в переменных VaBank БД в Delphi 13 03.06.2009 10:47