*.RGS & *.IDL & *.RC & versions?
От: Аноним  
Дата: 17.04.06 07:23
Оценка:
Привет!

Можно ли как то в файлах *.RGS & *.IDL & *.RC подставлять нужный номер версии который определен например в файде version.h через #define?

В *.RGS & *.IDL нужно проставлять версию для интерфейсов. По возможности автоматом менять версию VS_VERSION_INFO в *.RC

Возможно ли такое реализовать на уровне компиляции? Или все же придется писать утилиту для парсинга исходников и подмены старой версии на новую, чего не хотелось бы делать.
Re: *.RGS & *.IDL & *.RC & versions?
От: Константин Л. Франция  
Дата: 17.04.06 09:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Привет!


А>Можно ли как то в файлах *.RGS & *.IDL & *.RC подставлять нужный номер версии который определен например в файде version.h через #define?


А>В *.RGS & *.IDL нужно проставлять версию для интерфейсов. По возможности автоматом менять версию VS_VERSION_INFO в *.RC


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


Не знаю как там в .idl, .rgs, но в у меня так:

version.h

#define PRODUCTVER      1,0,0,0
#define PRODUCTVERSTR   "1, 0, 0, 0\0"
#define COPYRIGHT       "Copyright (c) 2004-2006 The Coca-Cola company\0"



*.rc

/////////////////////////////////////////////////////////////////////////////
//
// Version
//

#include "Version.h"

VS_VERSION_INFO VERSIONINFO
 FILEVERSION PRODUCTVER
 PRODUCTVERSION PRODUCTVER
 FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
 FILEFLAGS 0x1L
#else
 FILEFLAGS 0x0L
#endif
 FILEOS 0x4L
 FILETYPE 0x2L
 FILESUBTYPE 0x0L
BEGIN
    BLOCK "StringFileInfo"
    BEGIN
        BLOCK "040904b0"
        BEGIN
            VALUE "CompanyName", "Coca-Cola"
            VALUE "FileDescription", "Coca-Cola ...."
            VALUE "FileVersion", PRODUCTVERSTR
            VALUE "InternalName", "Coca-Cola"
            VALUE "LegalCopyright", COPYRIGHT
            VALUE "OriginalFilename", "Coca-Cola.exe"
            VALUE "ProductName", "Coca-Cola"
            VALUE "ProductVersion", PRODUCTVERSTR
        END
    END
    BLOCK "VarFileInfo"
    BEGIN
        VALUE "Translation", 0x409, 1200
    END
END
Re[2]: *.RGS & *.IDL & *.RC & versions?
От: Аноним  
Дата: 17.04.06 10:12
Оценка:
Здравствуйте, Константин Л., Вы писали:

А версии в *.RGS и *.IDL так и оставляешь старыми?

Спасибо за *.RC, но необходимо также менять версии интерфейсов, не будут же они всегда 1.0
Re[3]: *.RGS & *.IDL & *.RC & versions?
От: Константин Л. Франция  
Дата: 17.04.06 10:25
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, Константин Л., Вы писали:


А>А версии в *.RGS и *.IDL так и оставляешь старыми?


А>Спасибо за *.RC, но необходимо также менять версии интерфейсов, не будут же они всегда 1.0


Оставляю
Re[4]: *.RGS & *.IDL & *.RC & versions?
От: siv Украина  
Дата: 23.04.06 18:27
Оценка: 1 (1)
> А>А версии в *.RGS и *.IDL так и оставляешь старыми?
>
> А>Спасибо за *.RC, но необходимо также менять версии интерфейсов, не
> будут же они всегда 1.0
>
> Оставляю

Можно немного извратиться на основе предложенного "version.h".
Нужно включить его в тот файл, что содержит модуль.
В соответсвующем RGS-файле прописать вместо захардкоденной версии что-то
типа
CurVer = s '%MyActualSuperPuperIntefaceVersion%'.
Затем в классе модуля перегружаешь
AddCommonRGSReplacements( IRegistrarBase* pRegistrar )
и в ней пишешь
pRegistrar->AddReplacement( L"MyActualSuperPuperIntefaceVersion%",
L"MyProg.MyInt.12345" );
Разумеется вместо "MyProg.MyInt.12345" композишь строку на основе того,
что имеется в вашем "version.h".
Плюс, нужно убедиться, что для модуля вызывается UpdateRegistryAppId или
что-то аналогичное.
Всё! Хотя в деталях мог немного и наврать, но, думаю, идея с
динамической подстановкой содержимого RGS-файлов ясна
Posted via RSDN NNTP Server 2.0
Re[5]: *.RGS & *.IDL & *.RC & versions?
От: siv Украина  
Дата: 23.04.06 18:29
Оценка:
> pRegistrar->AddReplacement( L"MyActualSuperPuperIntefaceVersion%",
% тут не нужен!
Posted via RSDN NNTP Server 2.0
Re[5]: *.RGS & *.IDL & *.RC & versions?
От: Аноним  
Дата: 26.04.06 16:41
Оценка:
Здравствуйте, siv, Вы писали:

Круто!
Осталось только в *.IDL разрулить — что бы он подставлял нужную версию для описания type library из version.h

Спасибо!!!
Re[2]: *.RGS & *.IDL & *.RC & versions?
От: michus Россия  
Дата: 26.04.06 18:36
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>version.h

КЛ>
КЛ>#define PRODUCTVER      1,0,0,0
КЛ>#define PRODUCTVERSTR   "1, 0, 0, 0\0"
КЛ>#define COPYRIGHT       "Copyright (c) 2004-2006 The Coca-Cola company\0"
КЛ>


PRODUCTVERSTR можно формировать и так:

# define VER_1  1
# define VER_2  2
# define VER_3  3
# define VER_4  4

# define _MAKE_VER_STR(v1,v2,v3,v4) #v1 "." #v2 "." #v3 "." #v4 "\0"
# define MAKE_VER_STR(v1,v2,v3,v4) _MAKE_VER_STR (v1, v2, v3, v4)
# define PRODUCTVERSTR MAKE_VER_STR (VER_1, VER_2, VER_3, VER_4)


Это проще автоматизируется, когда приращение VER_4 происходит при каждой сборке.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.