用VC++作了一个DLL,要给VB调用,为了让 VB能够方便的判断DLL的版本,我就想在VC做的DLL里面定义一个导出函数 long GetDllVersion() ,以一个整形的方式返回DLL自身的版本号,请问该如何写?unsigned long GetDllVersion() //获取DLL的版本号。
//这样便于调试的时候知道 VB 正在调用哪个版本的dll.{

}
其中我知道DLL的版本号在资源ID里面设置,但不知道如何用代码去获取其值?请不吝赐教,谢谢!

解决方案 »

  1.   

    BOOL GetFileVersionInfo(          LPTSTR lptstrFilename,
        DWORD dwHandle,
        DWORD dwLen,
        LPVOID lpData
    );
      

  2.   

    通常的做法是:
    1: 你直接输出这个版本号,也就是说这个版本号的字穿在程序种写死。如果你要读取资源的话,用loadresourse
      

  3.   

    我目前就在程序种写死了。unsigned long GetDllVersion() //获取 DLL 自身的版本号。
    //这样便于调试的时候知道 VB 正在调用哪个版本的dll.
    {
    return(1103);

    }不过经过 goodboyws(深夜不眠者) 的提醒,我在VB中利用 API GetFileVersionInfo(),得到
      DLL的版本,也达到了目的.谢谢.
      

  4.   

    不过程序中的那些资源,如何通过资源ID得到其值.这个问题我到是很想知道,有谁能告诉我吗?谢谢了.
    比如
    VS_VERSION_INFO 里的那些字符串. 我是菜鸟,见笑了.
      

  5.   

    用VerQueryValue,如
       // read file version info
       DWORD dwDummyHandle; // will always be set to zero
       len = GetFileVersionInfoSize(filename, &dwDummyHandle);
       if (len <= 0)
          return FALSE;   m_pVersionInfo = new BYTE[len]; // allocate version info
       if (!::GetFileVersionInfo(filename, 0, len, m_pVersionInfo))
          return FALSE;   LPVOID lpvi;
       UINT iLen;
       if (!VerQueryValue(m_pVersionInfo, _T("\\"), &lpvi, &iLen))
          return FALSE;   // copy fixed info to myself, which am derived from VS_FIXEDFILEINFO
       *(VS_FIXEDFILEINFO*)this = *(VS_FIXEDFILEINFO*)lpvi;   // Get translation info
       if (VerQueryValue(m_pVersionInfo,
          "\\VarFileInfo\\Translation", &lpvi, &iLen) && iLen >= 4) {
          m_translation = *(TRANSLATION*)lpvi;
          TRACE("code page = %d\n", m_translation.charset);
       }