2012-11-28 10 views
7

Mam 2 projekty Visual C++, które oba mają plik RC, w którym zdefiniowano wersję produktu pola. Jak mogę zrobić oba projekty, aby uzyskać tę wersję z globalnego miejsca? Globalny plik RC lub jakie rozwiązania są dostępne?Jak mogę udostępnić tę samą wersję produktu między dwoma projektami Visual C++?

+0

utworzyć globalną 'wersję.h' file i dołącz go z obu plików rc –

+0

Myślę, że możesz tylko zmodyfikować informacje o wersji ręcznie tylko. – Healer

+0

@aleguna można podać przykład, co musi być w pliku version.h? – dbrasco

Odpowiedz

9

To, co działa dobrze, to dodanie dwóch "przedmiotów rozwiązania". Jednym z nich jest plik .h, który zawiera #defines niektóre ciągi wersji, a drugi to plik .rc z dołączonym znacznikiem .h i BLOCK "StringFileInfo", który używa definicji.

Poszczególne pliki zasobów dla każdego projektu używają TEXTINCLUDE do wprowadzania zawartości pliku .rc rozwiązania. .

Jest wiele do podjęcia w Pokażę wam, co mam na myśli ...

1) Obie pozycje roztworu dodaje się jako tak:

Solution Items

2)version.h ma kilka # definicji, które będą używane w VersionInfo.rc2

#define SOLUTIONFILEVERSION 1,00,0000,00000 
#define SOLUTIONFILEVERSIONSTRING "1,00,0000,00000" 
#define COPYRIGHT "Copyright 2012" 
#define PRODUCTNAME "Your product name" 
#define COMPANYNAME "Your company name" 

3) VersionInfo.rc2 wykorzystuje definiuje

#include "version.h" 
VS_VERSION_INFO VERSIONINFO 
FILEVERSION SOLUTIONFILEVERSION 
PRODUCTVERSION SOLUTIONFILEVERSION 
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", COMPANYNAME 
      VALUE "FileVersion", SOLUTIONFILEVERSIONSTRING 
      VALUE "LegalCopyright", COPYRIGHT 
      VALUE "ProductName", PRODUCTNAME 
      VALUE "ProductVersion", SOLUTIONFILEVERSIONSTRING 
     END 
    END 
    BLOCK "VarFileInfo" 
    BEGIN 
     VALUE "Translation", 0x409, 1200 
    END 
END 

Będziemy chcieli nową linię na końcu tego pliku, aby kompilator zasobów szczęśliwy, gdy jest on włączony w następnym kroku.

Innym polem, które chcesz ustawić, jest "FileDescription", ale zwykle jest to zależne od projektu. Pamiętaj, że może to zawierać wszystko, co chciałbyś dzielić między swoje projekty.

4) Uwzględnij VersionInfo.rc2 w każdym procesie. Odbywa się to przez kliknięcie prawym przyciskiem myszy .rc każdego projektu w widoku Widok zasobów i wybranie Zasób Zawiera.

Dodaj do dyrektyw kompilacji : #include "../VersionInfo.rc2"

Compile-time directives

można to zrobić ręcznie poprzez dodanie następujących do pliku .rc projektu, ale to chyba lepiej niech Visual Studio zarządzać wszystko to może dla ciebie.

3 TEXTINCLUDE 
BEGIN 
    "#include ""../VersionInfo.rc2""\r\n" 
    "\0" 
END 

///////////////////////////////////////////////////////////////////////////// 
// 
// Generated from the TEXTINCLUDE 3 resource. 
// 
#include "../VersionInfo.rc2" 
///////////////////////////////////////////////////////////////////////////// 

Uff ... to był kęs. Ale teraz powinieneś być w stanie zmienić wersje swojego produktu z jednego miejsca.

+0

dziękuję bardzo. Próbowałem Twojej sugestii, ale to nie działa. Stworzyłem plik version.h i utworzyłem definicje, a następnie utworzyłem plik VersionInfo.rc2 i umieściłem go w głównym pliku RC projektu. Dodałem również wersje version.h i VersionInfo.rc2 do projektu. Jedną z rzeczy, o której nie wspomniałeś, jest usunięcie plików wersji z głównego pliku RC. Zrobiłem to również. Podczas budowania projektu otrzymuję ostrzeżenia/błędy, a biblioteka dll opróżnia wszystkie pola, więc wygląda na to, że informacje o wersji nie są przekazywane. Nie wiem dokładnie, co robię źle. My IDE to Visual Studio 2009 – dbrasco

+0

Wspominasz ustawienie FileDescription na podstawie jednego projektu. Wszelkie sugestie dotyczące tego? Czy może istnieć inny 'BLOCK" StringFileInfo "' w pliku .rc specyficznym dla projektu, oprócz tego udostępnionego? – CoderDennis

+0

Poszedłem do przodu i próbowałem dodać blok informacji o drugiej wersji, który generuje błąd, jak podejrzewałem. Nadal poszukuje sposobu na uwzględnienie konkretnych wartości projektu. – CoderDennis

0

Ok, mam rozwiązanie.

musiałem dodać następujące także na dole pliku Odwołanie się projektu

///////////////////////////////////////////////////////////////////////////// 
// 
// Generated from the TEXTINCLUDE 3 resource. 
// 

#include "VersionInfo.rc2" 

///////////////////////////////////////////////////////////////////////////// 

Teraz wszystko działa świetnie. Dzięki

+0

Cieszę się, że to działa. Zaktualizowałem ostatni krok w mojej odpowiedzi, mam nadzieję, że ułatwi to każdemu, kto podąży za mną w przyszłości. –

Powiązane problemy