Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Заменить функцию gmtime
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Программирование
inventor
Нужно заменить в Windows функцию gmtime - так как она
очень некрасиво возвращает указатель на статический буфер где то в глубине
кишок windows
делаю прогу на С++ builder поэтому там нет функций типа gmtime_s
или может у кого есть код этой функции, я бы сам ее переделал как мне надо?

Olej
Цитата(inventor @ Jul 29 2017, 23:33) *
Нужно заменить в Windows функцию gmtime - так как она

Может проще ... заменить Windows? cranky.gif
Цитата(inventor @ Jul 29 2017, 23:33) *
очень некрасиво возвращает указатель на статический буфер где то в глубине
кишок windows

И не " в глубине кишок windows", а в внутри своей собственной библиотечной реализации.
И что в том плохого?
gmtime - POSIX стандартная функция, которая не одно десятилетие всех удовлетворяла.
Цитата
- Всю Одессу удовлетворяла, а его не удовлетворяет!?

Так что не нужно там ничего "заменить" wacko.gif
Цитата
делаю прогу на С++ builder поэтому там нет функций типа gmtime_s
или может у кого есть код этой функции, я бы сам ее переделал как мне надо?

Код есть в любой POSIX реализации open source.
А для thread safe реализации есть стандартизованная функция
Код
struct tm *gmtime_r(const time_t *timep, struct tm *result);

P.S. А что у вас там за приблуда gmtime_s ? ... так я и не соображу biggrin.gif




inventor
Цитата(Olej @ Jul 30 2017, 13:00) *
А для thread safe реализации есть стандартизованная функция
Код
struct tm *gmtime_r(const time_t *timep, struct tm *result);

P.S. А что у вас там за приблуда gmtime_s ? ... так я и не соображу biggrin.gif


есть варианты gmtime_r и gmtime_s и _gmtime32_s, _gmtime64_s
у меня windows 7. но надо чтобы работало и в windows XP и в 10-ке с 8-кой.
у самого С++ Buildera нет заголовков этих функций,
но вполне возможно они есть
в самом windows в каких нибудь dll.
я тока не знаю в каких и как их вызвать.
поэтому и спрашиваю как это обойти.
у меня вариант где то найти код gmtime и переделать его
на подобии gmtime_r или gmtime_s




нашел решение
гружу dll через LoadLibrary
нахожу адрес функции и вызываю ее:
CODE

typedef int (*pfn)(struct tm*, const long*);

pfn gmtime32_s;


LibHandle = LoadLibrary("msvcrt.dll");
if(LibHandle == NULL){
Application->MessageBox("Error!", "Ошибка загрузки dll", MB_ICONERROR);
}

(FARPROC)gmtime32_s = GetProcAddress(LibHandle, "_gmtime32_s");

ну и далее:
gmtime32_s(&t, &ls);

Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.