Перейти к содержанию
    

Заменить функцию gmtime

Нужно заменить в Windows функцию gmtime - так как она

очень некрасиво возвращает указатель на статический буфер где то в глубине

кишок windows

делаю прогу на С++ builder поэтому там нет функций типа gmtime_s

или может у кого есть код этой функции, я бы сам ее переделал как мне надо?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно заменить в Windows функцию gmtime - так как она

Может проще ... заменить Windows? :cranky:

очень некрасиво возвращает указатель на статический буфер где то в глубине

кишок windows

И не " в глубине кишок windows", а в внутри своей собственной библиотечной реализации.

И что в том плохого?

gmtime - POSIX стандартная функция, которая не одно десятилетие всех удовлетворяла.

- Всю Одессу удовлетворяла, а его не удовлетворяет!?

Так что не нужно там ничего "заменить" :wacko:

делаю прогу на С++ builder поэтому там нет функций типа gmtime_s

или может у кого есть код этой функции, я бы сам ее переделал как мне надо?

Код есть в любой POSIX реализации open source.

А для thread safe реализации есть стандартизованная функция

struct tm *gmtime_r(const time_t *timep, struct tm *result);

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

 

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А для thread safe реализации есть стандартизованная функция

struct tm *gmtime_r(const time_t *timep, struct tm *result);

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

 

есть варианты 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);

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...