2009-10-15 11 views
7

Nie znam skryptów RC.Czy potrzebuję afxres.h, jeśli nie używam MFC? Jak usunąć go ze skryptu .RC?

Chcę dołączyć wersję produktu, wersję pliku itp. Metadanych do biblioteki DLL, którą buduję. Używam do tego pliku .rc. Kompilacja jest napędzana makefile. Podążam za przykładem przykrycia .rc, które znalazłem.

Szablon pliku .rc zawiera afxres.h, ale nie potrzebuję tego. Ale jeśli po prostu go usunę, dostaję masę błędów kompilacji.

Jak wygląda podstawowy, niezwiązany z MFC skrypt? Mogę usunąć wszystkie rzeczy tak:

///////////////////////////////////////////////////////////////////////////// 
// English (U.S.) resources 

#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) 
#ifdef _WIN32 
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US 
#pragma code_page(1252) 
#endif //_WIN32 

.... 

Odpowiedz

2

Moja odpowiedź:
NIE, nie muszę wszystkie te bzdury. Oto skrypt RC, który działa dla VERSIONINFO.

#define VER_FILEVERSION   1,2,3,4 
#define VER_FILEVERSION_STR  "1.2.3.4" 
#define VER_PRODUCTVERSION  1,2,0,0 
#define VER_PRODUCTVERSION_STR "1.2.0.0" 

// ------------------------------------------------------- 

VS_VERSION_INFO VERSIONINFO 
FILEVERSION   VER_FILEVERSION 
PRODUCTVERSION   VER_PRODUCTVERSION 
FILEFLAGSMASK 0x17L 
#ifdef _DEBUG 
FILEFLAGS 0x1L 
#else 
FILEFLAGS 0x0L 
#endif 
FILEOS 0x4L 
FILETYPE 0x2L 
FILESUBTYPE 0x0L 
BEGIN 
BLOCK "StringFileInfo" 
BEGIN 
    BLOCK "040904b0" 
    BEGIN 
    VALUE "CompanyName",  "Company X" 
    VALUE "FileDescription", "Description Goes Here" 
    VALUE "InternalName",  "NotSure" 
    VALUE "LegalCopyright", "Copyright (C) 2009 Your Name Here" 
    VALUE "OriginalFilename", "DllName.dll" 
    VALUE "ProductName",  "Product Title" 
    VALUE "FileVersion",  VER_FILEVERSION_STR 
    VALUE "ProductVersion", VER_PRODUCTVERSION_STR 
    END 
END 
BLOCK "VarFileInfo" 
BEGIN 
    VALUE "Translation", 0x409, 1200 
END 
END 

Conmpile go z:

$(WindowsSDK)\bin\RC.exe /FoProjectName.res ProjectName.rc 
+3

Możesz edytować plik zasobów, który Ci się podoba. Zaletą pozostawienia samych linii, które usuwasz, jest możliwość ich automatycznej edycji za pomocą edytora zasobów. Jeśli przyjrzysz się uważnie, zobaczysz, że drugie odniesienie do afxres.h odbudowuje pierwszą, gdy plik jest regenerowany. Dlatego zamień oba odniesienia na afxres.h na windows.h (ponieważ nie używasz MFC), a problem zostanie rozwiązany. – shipr

5

miałem podobny problem, gdy próbuje skompilować bez MFC. Rozwiązanie Cheeso nie byłoby odpowiednie dla mnie.

Wszystko skompilowane w porządku i nie widziałem żadnych błędów/ostrzeżeń podczas budowy. Ikona zdefiniowana w moim pliku zasobów została poprawnie wyświetlona w "Eksploratorze Windows". Jednak dane wersji nie były dostępne. (Które można zobaczyć po kliknięciu prawym przyciskiem myszy na właściwości pliku wykonywalnego i wyboru.W tym przypadku nie było karty "wersja".)

Aby to działało, musiałem dodać następujące elementy na górze. Plik rc:

#include <windows.h> 

Po wprowadzeniu tej zmiany karta we właściwościach będzie widoczna we właściwościach pliku wykonywalnego. Ponadto klasa .NET System.Diagnostics.FileVersionInfo jest teraz w stanie uzyskać informacje o wersji, a to nie działało wcześniej.

Domyślnie "stdafx.h" będzie zawierać "windows.h". Nie jestem pewien, dlaczego Windows.h jest wymagany, ale wydaje się, że robi różnicę w moim przypadku.

Edytuj: Dodano bardziej szczegółowe informacje w odpowiedzi na Cheeso.

+0

Mówisz, że rc.exe nie skompilował skryptu rc, bez dołączonego pliku? Który symbol nie został zdefiniowany? Jak to się nie udało? – Cheeso