powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / Замена в строке по словарю
25 сообщений из 82, страница 3 из 4
Замена в строке по словарю
    #40132002
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

У него Линух. В винде было бы проще: там в заголовке экзешника есть специальное
поле для таймштампа сборки.

У меня Win + MSVS.

Для даты сборки я не помню стандартного свойства в *.rc файле. Но дело не в этом.
Кто данные будет вносить в этот файл?

Оно конечно можно углубиться в MSBuild и на C# в PreBuild что-то вкорячить.
Но это не так просто.
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132009
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я не специалист по Windows-сборочным тулзам. Но там что-то должно быть.
Помнится была консольная утилита rc.exe. Тоесть цена вопроса - перед компилляцией
просто обновить string ресурс с текущей датой.
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132016
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravКто данные будет вносить в этот файл?

Компилятор.
https://docs.microsoft.com/en-us/windows/win32/debug/pe-format
https://stackoverflow.com/a/26297/13964273
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132017
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovКомпилятор.

Ну или можно делать как я, заполнять поле ручками после сборки:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
#include <new.h>
#include <windows.h>
#include <stdio.h>

void ErrorHandler(const char* message)
{
   printf("failed: %s\n", message);
   exit(1);
}

int main(int argc, char* argv[])
{
   if (argc < 2)
   {
     printf("Usage: SetTimestamp <file name>...\n");
     exit(1);
   }

   for (int i=1; i<argc; i++)
   {
     printf("Setting timestamp for file \"%s\"...  ", argv[i]);

     HGLOBAL hResLoad;   // handle to loaded resource
     HMODULE hExe;       // handle to existing .EXE file
     HRSRC hRes;         // handle/ptr. to res. info. in hExe
     HANDLE hUpdateRes;  // update resource handle
     LPVOID lpResLock;   // pointer to resource data
     BOOL result;

     // Load the .EXE file that contains the dialog box you want to copy.
     hExe = LoadLibraryEx(argv[i], NULL, DONT_RESOLVE_DLL_REFERENCES);
     if (hExe == NULL)
     {
         ErrorHandler(TEXT("Could not load exe."));
     }

     // Locate the dialog box resource in the .EXE file.
     hRes = FindResource(hExe, MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION);
     if (hRes == NULL)
     {
         ErrorHandler(TEXT("Could not locate version resource."));
     }

     // Load the dialog box into global memory.
     hResLoad = LoadResource(hExe, hRes);
     if (hResLoad == NULL)
     {
         ErrorHandler(TEXT("Could not load resource."));
     }

     // Lock the dialog box into global memory.
     lpResLock = LockResource(hResLoad);
     if (lpResLock == NULL)
     {
         ErrorHandler(TEXT("Could not lock resource."));
     }

     VS_FIXEDFILEINFO* info;
     UINT len;
     if (VerQueryValue(lpResLock, "\\", reinterpret_cast<void**>(&info), &len) == 0)
     {
       ErrorHandler(TEXT("Could not query fixed version info"));
     }

     if (info->dwSignature != 0XFEEF04BDL)
     {
       ErrorHandler(TEXT("Signature check failed"));
     }

     FILETIME time;
     GetSystemTimeAsFileTime(&time);

     info->dwFileDateLS = time.dwLowDateTime;
     info->dwFileDateMS = time.dwHighDateTime;

     DWORD ResSize = SizeofResource(hExe, hRes);

     LPVOID NewBuf = malloc(ResSize);
     memcpy(NewBuf, lpResLock, ResSize);

     // Close file to let it be opened for write
     if (!FreeLibrary(hExe))
     {
         ErrorHandler(TEXT("Could not free executable."));
     }

     // Open the file to which you want to add the dialog box resource.
     hUpdateRes = BeginUpdateResource(argv[i], FALSE);
     if (hUpdateRes == NULL)
     {
         ErrorHandler(TEXT("Could not open file for writing."));
     }

     // Add new version resource to the update list.
     result = UpdateResource(hUpdateRes,
         RT_VERSION,
         MAKEINTRESOURCE(VS_VERSION_INFO),
         MAKELANGID(LANG_NEUTRAL, SUBLANG_NEUTRAL),
         NewBuf,                         // ptr to resource info
         ResSize);       // size of resource info

     if (result == FALSE)
     {
         ErrorHandler(TEXT("Could not add resource."));
     }

     // Write changes to FOOT.EXE and then close it.
     if (!EndUpdateResource(hUpdateRes, FALSE))
     {
         ErrorHandler(TEXT("Could not write changes to file."));
     }

     free(NewBuf);

     printf("success.\n");
   }

}


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132074
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Формат ресурс-файла описан https://formats.kaitai.io/windows_resource_file/index.html

По крайней мере можно кастомными средствами его генерить.
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132077
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Ну как бы лезть в PE Format… ну это как бы слишком, имхо.

А про VS_VERSION_INFO, это я знаю. Где-то у меня даже модуль есть
для чтения версии приложения от туда. И скрипт увеличивающий версию
приложения при каждом коммите в мастер.
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132078
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно кому нужна дата сборки в бинарнике? Заказчику?

Разработчику сорцах оно не надо. Если сорцы стоят под версионным контролем то дату мы всё равно видим
через git/svn.
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132080
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonСобственно кому нужна дата сборки в бинарнике?

ну, во-первых, она красиво светится в системных свойствах файла. Во-вторых, у
меня она выводится опять же для красоты в окошке About. В остальном я полагаюсь
на нумерацию версий.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132083
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Собственно кому нужна дата сборки в бинарнике? Заказчику?

Да, заказчику. Инженер смотрит на дату создания приложения и примерно помнит хронологию развития.
А номера версий они не запоминают. Они наоборот регулярно ломают нумерацию версий просто так.
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132116
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

maytonСобственно кому нужна дата сборки в бинарнике?

ну, во-первых, она красиво светится в системных свойствах файла. Во-вторых, у
меня она выводится опять же для красоты в окошке About. В остальном я полагаюсь
на нумерацию версий.

А если качать через веб или ftp то дата создания файла обычно .. тово?
Или тогда надо весь дистрибутив паковать в zip чтобы гарантировать сохранность дат.
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132124
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Повторяю медленно: дата сборки пишется в заголовок экзешника, а дата релиза - в
заголовок информации о версии. Естественно, они не могут потеряться просто так.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132126
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ну сорян. Просто показалось что речь идет о файловых атрибутах.
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132156
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
mayton
Собственно кому нужна дата сборки в бинарнике? Заказчику?

Да, заказчику. Инженер смотрит на дату создания приложения и примерно помнит хронологию развития.
А номера версий они не запоминают. Они наоборот регулярно ломают нумерацию версий просто так.

Кто ломает?
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132188
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
petrav
пропущено...

Да, заказчику. Инженер смотрит на дату создания приложения и примерно помнит хронологию развития.
А номера версий они не запоминают. Они наоборот регулярно ломают нумерацию версий просто так.

Кто ломает?

Инженеры.
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132189
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Повторяю медленно: дата сборки пишется в заголовок экзешника, а дата релиза - в
заголовок информации о версии. Естественно, они не могут потеряться просто так.

Мне кажется ваша программа только обновляет windows resources. В PE Format она не лезет.
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132206
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravМне кажется ваша программа только обновляет windows resources. В PE Format она
не лезет.

Да. Потому что окно системных свойств и мой код отображают дату из ресурсов, а
не заголовка.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132253
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
Изопропил
пропущено...

Кто ломает?

Инженеры.

они приложение собирают?
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132270
Bred eFeM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
... переполнил память :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
using namespace std;

bool replace(string& expr, const string& from, const string& to) {
    size_t start_pos = expr.find(from);
    if(start_pos == string::npos)
      return false;
    expr.replace(start_pos, from.length(), to);
    return true;
}

string replace_all(string expr, const map<string,string>& replacement) {
  for(auto const& [key, val] : replacement)
    while(replace(expr, key, val));
  return expr;
}

int main(int argc, char **argv) {
  map<string, string> months = {{"политический авантюрист","господин президент"},{"SUN","Oracle"},{"Cool","Ice"}, {"","null"} };
  cout << replace_all("Hey, SUN is Cool!", months) << endl;
  return 0;
}

...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132315
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил
petrav
пропущено...

Инженеры.

они приложение собирают?

Они пишут ТЗ и ТУ. Они ПО тестируют, отвечают за ПО перед заказчиком, пишут на ПО документацию и впаривают ПО военной приёмке. Ещё их сношают в первом отделе.

Золотые люди…
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132322
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravОни пишут ТЗ и ТУ. Они ПО тестируют, отвечают за ПО перед заказчиком, пишут на
ПО документацию и впаривают ПО военной приёмке.

И как это может повлиять на версию, которая суть строка в файле, лежащем в в СКВ?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132332
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravОни пишут ТЗ и ТУ. Они ПО тестируют, отвечают за ПО перед заказчиком, пишут на
ПО документацию и впаривают ПО военной приёмке.

И как это может повлиять на версию, которая суть строка в файле, лежащем в в СКВ?..

Потому что есть документ ТУ, в нём расписано всё: версии ПО, условия, требования и прочее. Этот документ пишут инженеры (и там написана версия). Военные люди специфичные (особенно в войсках). Версию 2 или 3 они понимают. Версию 3.1 понимают уже с трудом. Версию 5.56 (где 56 — это сквозной счётчик обновлений ПО) — военные это вообще не поймут и не подпишут.
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132333
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И? Версия продукта и версия файла это отдельные строки в ресурсе и они не
обязаны совпадать. У меня, например, версия продукта просто "1.0" в то время как
версия файла - полностью четырёхчленная.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132335
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

И? Версия продукта и версия файла это отдельные строки в ресурсе и они не
обязаны совпадать. У меня, например, версия продукта просто "1.0" в то время как
версия файла - полностью четырёхчленная.

И то что когда военный откроет About или свойства файла... И увидит там то, что он не подписывал (какие-то версии файла и т.д.) — то будет скандал. Поэтому до этого сдали версию 3.55, а потом 2.1. Потому что… забыли и подписали. И всё.

Вы может расскажете, в чём смысл вашей четырёхзначной версии? По каждому компоненту.
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132341
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravИ то что когда военный откроет About или свойства файла... И увидит там

....то, что ты ему выведешь. Идея вывести в About одну версию, а в логи другую -
реально настолько запредельно сложная?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Замена в строке по словарю
    #40132344
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

petravИ то что когда военный откроет About или свойства файла... И увидит там

....то, что ты ему выведешь. Идея вывести в About одну версию, а в логи другую -
реально настолько запредельно сложная?..

Так и в логи (точнее отчёты) нельзя выводить реальную версию. Отчёты тоже на подпись.

Идей то у меня много. Но разговор шёл о том как инженер ломает продуманную систему нумераций версий.

Вы о своей так и не рассказали.
...
Рейтинг: 0 / 0
25 сообщений из 82, страница 3 из 4
Форумы / C++ [игнор отключен] [закрыт для гостей] / Замена в строке по словарю
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]