Как узнать версию в RunTime ?
От: Koumandin Россия  
Дата: 22.04.01 10:55
Оценка:
Hi, all !
В ресурсах VC++ есть сведения о версии моей программы. Эти сведения мне приходится показывать также в окне About и в титульной строке главного окна. А так как программу я часто обновляю — заколебался каждый раз изменять номер версии в 3х местах. Посему вопрос: можно ли в рантайме слазить в свои же ресурсы и узнать всю необходимую инфу ? Или я чего не понимаю ?
Re: Как узнать версию в RunTime ?
От: VLK  
Дата: 22.04.01 12:08
Оценка:
Здравствуйте Koumandin, 22.04.2001 04:55:06 вы писали:

>Hi, all !

>В ресурсах VC++ есть сведения о версии моей программы. Эти сведения мне приходится показывать также в окне About и в титульной строке главного окна. А так как программу я часто обновляю — заколебался каждый раз изменять номер версии в 3х местах. Посему вопрос: можно ли в рантайме слазить в свои же ресурсы и узнать всю необходимую инфу ? Или я чего не понимаю ?

-----------------------------------------------------------
GetFileVersionInfo
VerQueryValue

Работа со структурами переменной длины. Вообще эта информация предусмотрена для программ инсталляции. Однако, ничего не мешает использовать ее здесь...

Также пожно попробовать найти ресурс по имени с помощью FindResourceEx.
Но там самому придется работать со структурой VS_VERSIONINFO.
Наверное, первый вариант проще...

С наилучшими,
Владимир.
Re[2]: Как узнать версию в RunTime ?
От: maslovsky  
Дата: 23.04.01 06:41
Оценка:
Здравствуйте VLK, 22.04.2001 06:08:35 вы писали:

>

>-----------------------------------------------------------
>GetFileVersionInfo
>VerQueryValue
>
>Работа со структурами переменной длины. Вообще эта информация предусмотрена для программ инсталляции. Однако, ничего не мешает использовать ее здесь...

Есть еще до безобразия простой вариант — задать версию через #define в каком-нибудь заголовке, а потом подставлять везде где можно, в том числе и в ресурсах.

version.h

#define VER_MAJOR 1
#define VER_MINOR 0
#define BUILD_MAJOR 0
#define BUILD_MINOR 0

#define FILEVER VER_MAJOR,VER_MINOR,BUILD_MAJOR,BUILD_MINOR
#define PRODUCTVER VER_MAJOR,VER_MINOR,0,0

#define STR_VER_MAJOR "1"
#define STR_VER_MINOR "0"
#define STR_BUILD_MAJOR "0"
#define STR_BUILD_MINOR "0"

resource.rc2
...
#include "Version.h"
VS_VERSION_INFO VERSIONINFO
FILEVERSION FILEVER
PRODUCTVERSION PRODUCTVER
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x21L
#else
FILEFLAGS 0x20L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "Build", STR_BUILD
VALUE "Comments", "\0"
VALUE "CompanyName", "My Company\0"
VALUE "FileDescription", "\0"
VALUE "FileVersion", STR_FILEVER
... <skipped>

Более того, используя макросы или addin'ы в VC, можно изменять версию в version.h автоматически при каждой сборке.

Единственная проблема — проходится объявлять циферки дважны — один раз как цифры, другой раз как строки. У меня не получилось заставить препроцессор конвертнуть цифру в строку...

Удачи,
Антон
Удачи,
Антон
Re: Как узнать версию в RunTime ?
От: Odissey Россия http://malgarr.blogspot.com/
Дата: 23.04.01 07:36
Оценка:
Здравствуйте Koumandin, 22.04.2001 04:55:06 вы писали:

>Hi, all !

>В ресурсах VC++ есть сведения о версии моей программы. Эти сведения мне приходится >показывать также в окне About и в титульной строке главного окна. А так как >программу я часто обновляю — заколебался каждый раз изменять номер версии в 3х >местах. Посему вопрос: можно ли в рантайме слазить в свои же ресурсы и узнать всю >необходимую инфу ? Или я чего не понимаю ?

вот здесь есть классик CVersionApp
http://codeguru.earthweb.com/misc/VersionApp.shtml

делает то что ты спрашиваешь.
Re[3]: Как узнать версию в RunTime ?
От: maslovsky  
Дата: 23.04.01 14:37
Оценка:
Разобрался и со строковым define'ом

#define STR(x) #x
#define XSTR(x) STR(x)

#define VER_MAJOR 1
#define VER_MINOR 0
#define BUILD_MAJOR 3
#define BUILD_MINOR 19

#define STR_VER_MAJOR XSTR(VER_MAJOR)
#define STR_VER_MINOR XSTR(VER_MINOR)
#define STR_BUILD_MAJOR XSTR(BUILD_MAJOR)
#define STR_BUILD_MINOR XSTR(BUILD_MINOR)
Удачи,
Антон
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.