GameDev.ru
/ GameDev.ru / Пользователи / Andrey / Сообщения на форуме пользователя Andrey (195 стр.)

Сообщения на форуме пользователя Andrey (195 стр.)

reinterpret_cast<>() vs ..._cast<>()21 фев. 200615:37#18
DEN
>Хмм.... Можно пример такой библиотеки?
ogg/vorbis по примеру из статьи про OpenAL тут на сайте, там как раз void * к istream но я пепределал на FILE *
reinterpret_cast<>() vs ..._cast<>()21 фев. 200614:47#15
DEN
>1. И FILE*, и fstream*, и ваще любой указатель на данные к void* кастуктся статик_кастом.
согласен
но он предуман взамену стиля преобразования C
>2. Делать общую функцию и для FILE* и для fstream* через void* - это маразм.
так требует сторонняя бибилиотека и не надо говорить что она написана криво.
C++ vs C#21 фев. 200614:45#191
Uri
не не ребенок и не сарказм.
но C# не нравиться :)
reinterpret_cast<>() vs ..._cast<>()21 фев. 200614:19#13
DEN
>Хороший стиль программирования это не использовать "преобразования совсем разных типов".
когда нибудь возникнет эта задача и она возникнет не от того что разные типы и это плохо.
Например указатель на функцию чтения файла:
один из параметров которой это void * который предполагает указатель для работы с файлом.
void * в этом случае сделан для универсальности.
вот и встретились преобразования разных типов например к FILE*  к  fstream* и т.д.
или этот оператор придумали для тех кто програмиирует в плохом стиле?
тут много будет мнений.
C++ vs C#21 фев. 200614:01#189
Tharnum
Ты просто супер правильно говоришь!!!C# полный отстой как и Java.
Я думаю C++ не должен умереть с появлением C#.
И как это многие утверждают что Direct3D на C# ненемного уступает скорости на C++?
Я как-то наблюдал ситуацию многие кто на C++ совсем буб-бум, сразу круто начали писать и разбираться в C#.
reinterpret_cast<>() vs ..._cast<>()21 фев. 200613:55#11
WebErrAtor
я считаю что при програмировании на C++ для преобразования совсем разных типов, рекомендуется использовать собственный оператор преобразования типа т.е. reinterpret_cast. Это хороший стиль программирования
Вопрос по C++ (указатели)19 фев. 200614:07#1
__Andrey__
>Имеет ли мне смысл при инициализации объекта создать указатели на те переменные большой структуры которые часто ?>будут встречаться в вычислениях и в формулах и при стложных подсчётах использовать именно их, что бы зря не >производить лишние вычисления.
сделай static переменную внутри объекта. Если у тебя есть наследования то эту переменную храни в родителе. тогда избежишь хранения 1 и того-же указателя во всех объектах.
>Будет ли это
>cpDirect3DDevice->SetTexture (4, pTextura001);
>работать быстреее чем это
>cpDirect3DDevice->SetTexture (4, csObjectsContent_ptr->SetOfTexturesAndMaterials.ArrayOfTexture[AmbientTextureNum]); ?
мне кажеться практически одинаково, и компилятор скорей всего может это оптимизировать.
Ошибка с указателями,не могу ее найти.Помогите.19 фев. 200612:47#15
COTOHA
все что могу посоветовать при работе с указателями сначала инициализировать eуказатели NULL
а потом при обращении к ним проверять на NULL
в этом сучаем ты избежишь сразу 2 ошибок: 1. обращение к нулевому указателю 2. Ображение к неинициализированному указателю т.е. к мусору
Непонятки с PointSprite18 фев. 200622:51#1
iii
я использовал интерфейс точечных спрайтов но не обращал внимание... надо как то посмотреть...
Win32: Как в блоке в блоке __try...__except получить адрес указателя?18 фев. 200622:48#11
Glorg
все понятно спасибо тебе
Тема закрыта.
Win32: Как в блоке в блоке __try...__except получить адрес указателя?18 фев. 200620:15#9
Glorg
все понятно спасибо за разъяснение я так и примерно предполагал про что ты написал
>WinAPI функции надёжнее в этом плане
блин ну если  все так страшно то тут и Win32 функции могут не помочь...
неужели sprintf сильно отличается от wsprintf ну если не считать whar_t * ?
Win32: Как в блоке в блоке __try...__except получить адрес указателя?18 фев. 200617:51#7
Glorg
во спасибо большое лишней функции не будет, и еще дополнительно буду хнать что писалось или читалось по адресу
>Небольшая добавка. При обработке исключений лучше использовать WinAPI функции, например wsprintf(). Шансы что приложение отработает правильно - несколько выше, поскольку гарантировать что твой код не попортил CRT кучу иногда нельзя.
хм... очень непонятно...
а что ANSI sprintf может попортить что не попортит wsprintf?
Win32: Как в блоке в блоке __try...__except получить адрес указателя?18 фев. 200615:36#5
Спасибо всем разобрался вот хороший обработчик ошибок:
int filter(int code, _EXCEPTION_POINTERS *ep)
{
	if (ep) {
		enum {size = 200};
		char buf[size] = {'\0'};
		const char* err = "Fatal error, exeption code: 0x";
		const char* mes = "\nProgram terminate";
		if (ep)
			//пишем в буфер информацию о коде исключения, а адрес указателя, адрес инсттрукции
			sprintf(buf, "%s%x%s%x%s%x%s", err, ep->ExceptionRecord->ExceptionCode, ",data adress: 0x", ep->ExceptionRecord->ExceptionInformation[1],",instruction adress: 0x", ep->ExceptionRecord->ExceptionAddress, mes);
		else
			sprintf(buf, "%s%x%s", err, code, mes);
		Log::write(buf);
	}
	return EXCEPTION_EXECUTE_HANDLER;
}
__try {
//тут идет работа приложения и возможно ошибка при работе с памятью...

}
__except (filter(GetExceptionCode(), GetExceptionInformation()))  {
//тут ничего не делаем т.к. делат все функция filter

}

Правка: 18 фев. 2006 15:37

Win32: Как в блоке в блоке __try...__except получить адрес указателя?18 фев. 200615:00#4
Glorg
Спасибо большое!!!
>Используешь: GetExceptionInformation(), Получаешь: EXCEPTION_POINTERS, в нём тебя интересует указатель на >EXCEPTION_RECORD.
вот пробоал использовать но что-то не компилиться :(
struct  _EXCEPTION_POINTERS *ep = NULL;
....
__except (EXCEPTION_EXECUTE_HANDLER) {
		enum {size = 200};
		char buf[size] = {'\0'};
		const char* err = "Fatal error, exeption code: 0x";
		const char* mes = "\nProgram terminate";
		ep = GetExceptionInformation();
		if (ep)
		sprintf(buf, "%s%x%s%p%s", err, ep->ExceptionRecord->ExceptionCode, ",invalid adress: ", ep->ExceptionRecord->ExceptionAddress, mes);
		Log::write(buf);
	}

вот ошибки:
e:\Andrey\Projects\skeletons_common\Application.cpp(251): error C2707: '_exception_info' : bad context for intrinsic function
e:\Andrey\Projects\skeletons_common\level4.h(2886): warning C4228: nonstandard extension used : qualifiers after comma in declarator list are ignored
смотрел пример из MSDN там есть filter
я его переделал получилось вот что:
int Application::filter(int code, struct _EXCEPTION_POINTERS *ep)
{
	return EXCEPTION_EXECUTE_HANDLER;
}
...
__except (filter(GetExceptionCode(), GetExceptionInformation())) {
		enum {size = 200};
		char buf[size] = {'\0'};
		const char* err = "Fatal error, exeption code: 0x";
		const char* mes = "\nProgram terminate";
		if (ep)
			sprintf(buf, "%s%x%s%p%s", err, ep->ExceptionRecord->ExceptionCode, ",invalid adress: ", ep->ExceptionRecord->ExceptionAddress, mes);
		else
			sprintf(buf, "%s%x%s", err, GetExceptionCode(), mes);
		Log::write(buf);
	}

но почему-то ep == NULL :(

Правка: 18 фев. 2006 15:01

Win32: Как в блоке в блоке __try...__except получить адрес указателя?18 фев. 200614:08#2
J_f_S
>Дык если бросается исключение, это и значит, что адрес не валидный.
Мне нужно знать 1 из  вариантов указатель нулевой или с мусором. почитай повнимательней пост.

Следующие темы >>

2001—2012 © GameDev.ru — Разработка игр