inventor 0 29 июля, 2017 Опубликовано 29 июля, 2017 · Жалоба Нужно заменить в Windows функцию gmtime - так как она очень некрасиво возвращает указатель на статический буфер где то в глубине кишок windows делаю прогу на С++ builder поэтому там нет функций типа gmtime_s или может у кого есть код этой функции, я бы сам ее переделал как мне надо? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Olej 0 30 июля, 2017 Опубликовано 30 июля, 2017 · Жалоба Нужно заменить в Windows функцию gmtime - так как она Может проще ... заменить Windows? :cranky: очень некрасиво возвращает указатель на статический буфер где то в глубине кишок windows И не " в глубине кишок windows", а в внутри своей собственной библиотечной реализации. И что в том плохого? gmtime - POSIX стандартная функция, которая не одно десятилетие всех удовлетворяла. - Всю Одессу удовлетворяла, а его не удовлетворяет!? Так что не нужно там ничего "заменить" делаю прогу на С++ builder поэтому там нет функций типа gmtime_s или может у кого есть код этой функции, я бы сам ее переделал как мне надо? Код есть в любой POSIX реализации open source. А для thread safe реализации есть стандартизованная функция struct tm *gmtime_r(const time_t *timep, struct tm *result); P.S. А что у вас там за приблуда gmtime_s ? ... так я и не соображу Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
inventor 0 30 июля, 2017 Опубликовано 30 июля, 2017 · Жалоба А для thread safe реализации есть стандартизованная функция struct tm *gmtime_r(const time_t *timep, struct tm *result); P.S. А что у вас там за приблуда gmtime_s ? ... так я и не соображу есть варианты gmtime_r и gmtime_s и _gmtime32_s, _gmtime64_s у меня windows 7. но надо чтобы работало и в windows XP и в 10-ке с 8-кой. у самого С++ Buildera нет заголовков этих функций, но вполне возможно они есть в самом windows в каких нибудь dll. я тока не знаю в каких и как их вызвать. поэтому и спрашиваю как это обойти. у меня вариант где то найти код gmtime и переделать его на подобии gmtime_r или gmtime_s нашел решение гружу dll через LoadLibrary нахожу адрес функции и вызываю ее: 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); Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться