Can't use RC file



  • Hi
    I would like to display information in detail in my executablelike company name version etc.
    so I made this rc file:

    #ifndef RCFILE_H
    #define RCFILE_H
    #include "../svn_version.rc"
    
    IDI_ICON1               ICON    DISCARDABLE     "../res/mediasofts.ico"
    #define VER_FILEVERSION             1,0,0,0
    #define VER_FILEVERSION_STR         "1.0.0.0\0"
    
    #define VER_PRODUCTVERSION          1,0,0,I_SVNREVINT
    #define VER_PRODUCTVERSION_STR      "1.0\0"
    
    #define VER_COMPANYNAME_STR         "Médiasofts"
    #define VER_FILEDESCRIPTION_STR     "Mediacad drawing software"
    #define VER_INTERNALNAME_STR        "Médiacad"
    #define VER_LEGALCOPYRIGHT_STR      "Copyright © 2016 Médiasofts"
    #define VER_LEGALTRADEMARKS1_STR    "All Rights Reserved"
    #define VER_LEGALTRADEMARKS2_STR    VER_LEGALTRADEMARKS1_STR
    #define VER_ORIGINALFILENAME_STR    "Mediacad.exe"
    #define VER_PRODUCTNAME_STR         "Mediacad"
    
    #define VER_COMPANYDOMAIN_STR       "http://mediasofts.fr/"
    
    BEGIN
        BLOCK "StringFileInfo"
        BEGIN
            BLOCK "040904E4"
            BEGIN
                VALUE "CompanyName",        VER_COMPANYNAME_STR
                VALUE "FileDescription",    VER_FILEDESCRIPTION_STR
                VALUE "FileVersion",        VER_FILEVERSION_STR
                VALUE "InternalName",       VER_INTERNALNAME_STR
                VALUE "LegalCopyright",     VER_LEGALCOPYRIGHT_STR
                VALUE "LegalTrademarks1",   VER_LEGALTRADEMARKS1_STR
                VALUE "LegalTrademarks2",   VER_LEGALTRADEMARKS2_STR
                VALUE "OriginalFilename",   VER_ORIGINALFILENAME_STR
                VALUE "ProductName",        VER_PRODUCTNAME_STR
                VALUE "ProductVersion",     VER_PRODUCTVERSION_STR
                VALUE "Rev",     I_SVNREV
                VALUE "Date",     I_SVN_CLOCKDATE
            END
        END
    
        BLOCK "VarFileInfo"
        BEGIN
            VALUE "Translation", 0x409, 1252
        END
    END
    #endif // RCFILE_H
    

    I have

    RC_FILE = mediacad.rc
    

    in my .pro but the compilation failed on RC with :
    ....\MediaCad\mediacad.rc(24) : error RC2135 : file not found: StringFileInfo
    ....\MediaCad\mediacad.rc(26) : error RC2135 : file not found: 040904E4
    ....\MediaCad\mediacad.rc(28) : error RC2135 : file not found: CompanyName
    ....\MediaCad\mediacad.rc(29) : error RC2135 : file not found: VALUE

    I don't know why it failed .
    Do you have an idea ?
    Is it possible to use RC file for DLL too ?



  • Hi, you forgot the version info title line, try change to this:

    ...
    ...
    #define VER_PRODUCTNAME_STR         "Mediacad"
    
    #define VER_COMPANYDOMAIN_STR       "http://mediasofts.fr/"
    
    VS_VERSION_INFO VERSIONINFO
    BEGIN
        BLOCK "StringFileInfo"
    ...
    ...
    


  • Thanks, errors are gone but if I look the details of my executable
    (properties > details on windows) I did not found my information.



  • Hi, actually if you binary dump your .exe file you'll see your version info, but agreed it's nice to be able to see it in Explorer (properties->details).

    So, at the top of your .RC file add a Language statement to make the version info visible. (Need windows.h for LANG_ENGLISH etc, I think you can replace those with hex numbers if you don't like to include windows.h):

    #ifndef RCFILE_H
    #define RCFILE_H
    
    #include <windows.h>
    LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
    
    #include "../svn_version.rc"
    
    IDI_ICON1               ICON    DISCARDABLE     "../res/mediasofts.ico"
    #define VER_FILEVERSION             1,0,0,0
    ...
    

    Also to cover all the bases/fields in that properties->details dialog box, you can get fancy and add the Fileversion and Productversion lines:

    ...
    #define VER_COMPANYDOMAIN_STR       "http://mediasofts.fr/"
    
    VS_VERSION_INFO VERSIONINFO
    FILEVERSION VER_FILEVERSION
    PRODUCTVERSION VER_PRODUCTVERSION
    BEGIN
        BLOCK "StringFileInfo"
    ...
    

    Hope this helps!



  • Thanks it works now.



  • Hi, thanks for this discussion.
    After implementing as per suggested by Roy44 and Hskoglund, I am able to see version info of my exe in File->property->Details.

    I have following questions:

    • It is showing FileVersion as 0.0.0.0. What do I need to do for displaying my desired FileVersion there?
    • What do we need to do for Linux and MAC. As here we are including "windows.h", that may not work while compiling code on these OS.

    Thanks.



  • Use the VERSION variable in your project file.



  • @mdnchauhan said in Can't use RC file:

    • What do we need to do for Linux and MAC. As here we are including "windows.h", that may not work while compiling code on these OS.

    RC files are a Windows thing. OSX and Linux use different approaches. So you don't need to concern about the #include <windows.h> in the RC file since they won't use it.

    OSX (Mac) uses a "Info.plist" file, that is a xml describing the application info in the following format:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    <plist version="1.6">
    <dict>
    	<key>NSPrincipalClass</key>
    	<string>NSApplication</string>
    	<key>CFBundleIconFile</key>
    	<string>@ICON@</string>
    	<key>CFBundlePackageType</key>
    	<string>APPL</string>
    	<key>CFBundleGetInfoString</key>
    	<string>//Version goes here. something like 1.0.0//</string>
    	<key>CFBundleSignature</key>
    	<string>@TYPEINFO@</string>
    	<key>CFBundleExecutable</key>
    	<string>@EXECUTABLE@</string>
    	<key>CFBundleIdentifier</key>
    	<string>@BUNDLEIDENTIFIER@</string>
    	<key>NOTE</key>
    	<string>//Some text you want to put here. something short like "Business® All rights reserved"//</string>
    	<key>CFBundleShortVersionString</key>
    	<string>//Bundle version. Usually the same thing as CFBundlePackageType//</string>
    	<key>CFBundleVersion</key>
    	<string>//same thing as above//</string>
    </dict>
    </plist>
    

    Also you need to specify the path to the Info.plist in your .pro file:

    QMAKE_INFO_PLIST = /path/to/your/Info.plist
    

    My suggestion is to put it in the root of your project directory and use

    QMAKE_INFO_PLIST = $$_PRO_FILE_PWD_/Info.plist
    

    To set the application icon, just add to your .pro file:

    ICON = /path/to/icon.icns 
    

    I don't know how it works in Linux, though.


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.