2012-11-22 18 views
0

有人可以帮我写一个版本化的DLL的例子吗? 我想创建一个函数,在编译期间 - 设置DLL的所有细节,但我不知道该怎么做,甚至不知道如何启动或从何处开始。如何创建一个版本化的DLL

回答

0

所涉及的三个步骤是:

  1. 创建version resource script
  2. 使用resource compiler编译版本资源脚本。
  3. 将已编译的资源文件(后缀.res)链接到DLL中。

实施例:

  • 的main.cpp

    #include <windows.h> 
    BOOL APIENTRY DllMain(HMODULE, DWORD, LPVOID) { return TRUE; } 
    
  • version.rc

    #define APSTUDIO_READONLY_SYMBOLS 
    #include "windows.h" 
    #undef APSTUDIO_READONLY_SYMBOLS 
    
    LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_UK 
    #pragma code_page(1252) 
    
    VS_VERSION_INFO VERSIONINFO 
    FILEVERSION 1,9,1,7 
    PRODUCTVERSION 2,2,2,2 
    FILEFLAGSMASK 0x3fL 
    FILEFLAGS 0x0L 
    FILEOS 0x40004L 
    FILETYPE 0x1L 
    FILESUBTYPE 0x0L 
    BEGIN 
        BLOCK "StringFileInfo" 
        BEGIN 
         BLOCK "080904b0" 
         BEGIN 
          VALUE "CompanyName", "My Company.\0" 
          VALUE "FileDescription", "My File\0" 
          VALUE "FileVersion", "1.9.1.7\0" 
          VALUE "InternalName", "my-real-file\0" 
          VALUE "LegalCopyright", "Copyright © 2012 My Company Ltd.\0" 
          VALUE "OriginalFilename", "my.dll\0" 
          VALUE "PrivateBuild", "820\0" 
          VALUE "ProductName", "My Company: my dll\0" 
          VALUE "ProductVersion", "2.2.2.2\0" 
         END 
        END 
        BLOCK "VarFileInfo" 
        BEGIN 
         VALUE "Translation", 0x809, 1200 
        END 
    END 
    

从命令行:

 
> rc version.rc 

> cl /nologo /LD main.cpp version.RES 
main.cpp 

这将创建一个版本选项卡main.dll

警告:自从我看了这个并忘记了version.rc脚本中所有内容的含义之后,我已经有相当长的一段时间了。

+0

对不起这个问题,但这是C++吗?它有BEGIN,END,BLOCK和VALUE ..这是什么语言?并且我应该添加一个.rc文件到我在VS2010中打开的项目中?我很困惑 – user1386966

+0

资源脚本不是C++。如果您按照资源编译器的链接进行操作,您可以了解有关脚本内容的更多信息。至于使用VS2010 IDE,恐怕我不能提供帮助,因为我不使用IDE。我怀疑IDE会为您生成脚本。 – hmjd

+0

以后如何链接?我正在使用VS和预构建属性,我想将它添加到那里,我应该给出dll项目的完整路径吗?然后使用:fo/resource.rc?那么我应该得到RES文件,然后呢?我如何链接它?我应该使用后生成的属性? – user1386966