如何创建一个版本化的DLL

时间:2012-11-22 11:49:23

标签: c++ windows dll versioning

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

1 个答案:

答案 0 :(得分:0)

涉及的三个步骤是:

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

    • 的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脚本中的所有内容意味着什么。