Гость_ripper |
Отправлено: 06.06.2003, 12:06 |
|
Не зарегистрирован
|
Как в Caption формы или в AnsiSting записать версию Build проги??? |
|
Георгий |
Отправлено: 06.06.2003, 13:10 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
где-то в FAQ уже было — вот вырезки из того, что в FAQ:
CODE |
AnsiString GetProgramVersion(void)
{
AnsiString ret;
DWORD h;
DWORD Size=GetFileVersionInfoSize(Application->ExeName.c_str(), &h);
if(Size==0) return ret;
char *buf;
buf=(char*)GlobalAlloc(GMEM_FIXED, Size);
if( GetFileVersionInfo( Application->ExeName.c_str(),
h,
Size,
buf)!=0)
{
char *ValueBuf;
UINT Len;
VerQueryValue(buf, "\\VarFileInfo\\Translation", &(void*)ValueBuf, &Len);
if (Len>=4)
{
AnsiString CharSet=IntToHex((int)MAKELONG(*(int*)(ValueBuf+2), *(int*)ValueBuf), 8);
/*
if(VerQueryValue(buf,
AnsiString("\\StringFileInfo\\"+CharSet+"\\ProductName").c_str(),
&(void*)ValueBuf,
&Len)!=0)
AppName->Caption=ValueBuf;
*/
if(VerQueryValue(buf,
AnsiString("\\StringFileInfo\\"+CharSet+"\\FileVersion").c_str(),
&(void*)ValueBuf,
&Len)!=0)
{
ret=ValueBuf;
}
/*
if(VerQueryValue(buf,
AnsiString("\\StringFileInfo\\"+CharSet+"\\LegalCopyright").c_str(),
&(void*)ValueBuf,
&Len)!=0)
Copyright->Caption=ValueBuf;
if(VerQueryValue(buf,
AnsiString("\\StringFileInfo\\"+CharSet+"\\CompanyName").c_str(),
&(void*)ValueBuf,
&Len)!=0)
Company->Caption=ValueBuf;
*/
}
}
GlobalFree(buf);
return ret;
};
| |
|
ripper |
Отправлено: 09.06.2003, 14:05 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 5
|
Спасибо! Буду юзать.... |
|
Dmitri |
Отправлено: 12.06.2003, 13:16 |
|
admin@localhost
Группа: Модератор
Сообщений: 110
|
Не работает... :/ В чем дело?
|
|
Asher |
Отправлено: 12.06.2003, 13:37 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
НЕ работает — понятие растяжимое
Что конкретно не работает, как это проявляется?
P.S.: Кстати а этот номер вообще у твоей проги есть?
ты включал Version Info в проект?
Проверь галочку по Project->Options...->Version Info->Include Version Information in Project
|
|
Dmitri |
Отправлено: 13.06.2003, 10:11 |
|
admin@localhost
Группа: Модератор
Сообщений: 110
|
Галка там стоит. Включаю этот код без изменений в новый проект
CODE |
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
// Здесь этот код
}
|
А он кричит:
Improper use of typedef 'AnsiString' -> показывает на строку AnsiString GetProgramVersion(void)
Statement missing ; -> сюда же
У кого этот код работает, разместите тут project пустой с этой фичей.
|
|
Asher |
Отправлено: 13.06.2003, 11:21 |
|
Мастер участка
Группа: Модератор
Сообщений: 550
|
Все правильно. Ругается, будет ругаться и ДОЛЖНА РУГАТЬСЯ!!!
В том варианте что привел Георгий это ФУНКЦИЯ.
ЧТО ОНА ДЕЛАЕТ ВНУТРИ конструктора формы???
Сама функция заполняет Label'ы с именами AppName? Company? CopyRight считанными значениями, плюс возвращает версию программы.
Вытащи ее из конструктора, пожалуйста...
И она покажет на что способна
|
|
Dmitri |
Отправлено: 13.06.2003, 21:55 |
|
admin@localhost
Группа: Модератор
Сообщений: 110
|
Отдельная функция, билдер кричит: (C++ Error) Unit1.cpp(18): E2206 Illegal character '' (0xa0). Что-то я не понимаю.
|
|
Георгий |
Отправлено: 13.06.2003, 22:45 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Dmitri
значит что-то не то скопировали.
офирмил как отдельный файл.
инструкции по использованию:
1. Project->add to project — выбираем файл GetProgramVersion.cpp
2. жмём File->Include unit hdr и выбирает GetProgramVersion
3. вызываем
CODE |
Application->MessageBox(GetProgramVersion().c_str(),"Как бы версия программы",MB_OK);
|
|
|
Dmitri |
Отправлено: 15.06.2003, 10:51 |
|
admin@localhost
Группа: Модератор
Сообщений: 110
|
Георгий, спасибо Вам за пример! Но как сделать, чтобы показывался build программы, который сам по себе меняется. Версия статична, она не интересна.
|
|
Георгий |
Отправлено: 15.06.2003, 12:47 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
т.н. "версия" — это полная версия — версия программы.ревизия.релиз.сборка — у меня моя же функция пишет 1.7.22.168
если в настройках проекта стоит галка autoincrement build number, то иногда BCB сам увеличивает номер билда. обычно увеличение номера происходит при полной перекомпиляции проекта. |
|
Dmitri |
Отправлено: 19.06.2003, 14:11 |
|
admin@localhost
Группа: Модератор
Сообщений: 110
|
Странно, у меня включена autoincrement build number, но версия статична. Все время выводит 1.0.0.0
|
|
Admin |
Отправлено: 19.06.2003, 15:02 |
|
Владимир
Группа: Администратор
Сообщений: 1190
|
А у меня в C++Builder6 это называется
Include version information in Project
----
Надо Build проект, а не компилить, тогда увеличивается.
|
|
Dmitri |
Отправлено: 19.06.2003, 18:25 |
|
admin@localhost
Группа: Модератор
Сообщений: 110
|
OK, последняя цифра в версии 1.0.0.0 меняется, когда я нажимаю Build, но затем нужно заходить в Project -> Options, иначе эта цифра не обновится При этом затем я все равно компилирую проект, т.к. exe запустить надо же. Как-то криво получается
А средние цифры когда меняются?
|
|
Георгий |
Отправлено: 19.06.2003, 18:57 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
остальные меняются руками причём действует такое правило:
первым пишется версия програмного пакета частью которого является эта программа
2-м пишется ревизия — изменется на +1 при наличии средних изменений и на +5 при существенных изменениях (но только для тех, которые не изменяют № версии)
3-м пишется число т.н. выпусков программы — это когда процесс исправления ошибок и/или добавления новых функций завершён и есть работоспособная версия программы
4-м — № сборки — фактически единственный линейный параметр — означает число полных перекомпиляций проекта, которые были выполнены из-за изменений исходных текстов.
как видно значения параметров с 1 по 3-й определается на более высоком уровне абстракций, чем те, на которых работает BCB и поэтому это приходится изменять руками.
возможно некоторые WorkFlow позволяют автоматизировать этот процесс, но я о таких не слышал.
А тема — то какая живучая оказалась... |
|
Dmitri |
Отправлено: 19.06.2003, 21:03 |
|
admin@localhost
Группа: Модератор
Сообщений: 110
|
Всем спасибо за объяснения!!!
|
|