Jump to content
    

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

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

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

кишок windows

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

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

 

 

Share this post


Link to post
Share on other sites

Нужно заменить в 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:

 

 

 

 

 

Share this post


Link to post
Share on other sites

А для 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);

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...