реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Заменить функцию gmtime
inventor
сообщение Jul 29 2017, 20:33
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Нужно заменить в Windows функцию gmtime - так как она
очень некрасиво возвращает указатель на статический буфер где то в глубине
кишок windows
делаю прогу на С++ builder поэтому там нет функций типа gmtime_s
или может у кого есть код этой функции, я бы сам ее переделал как мне надо?

Go to the top of the page
 
+Quote Post
Olej
сообщение Jul 30 2017, 10:00
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 351
Регистрация: 11-09-05
Из: Харьков
Пользователь №: 8 458



Цитата(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




Go to the top of the page
 
+Quote Post
inventor
сообщение Jul 30 2017, 12:18
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 524
Регистрация: 25-12-08
Из: Москва
Пользователь №: 42 748



Цитата(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);

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th April 2024 - 10:17
Рейтинг@Mail.ru


Страница сгенерированна за 0.01436 секунд с 7
ELECTRONIX ©2004-2016