⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 01_9_17_20.asp.html

📁 有用的VC教程,包括编程思想编程技巧程序效率等方面的指导
💻 HTML
📖 第 1 页 / 共 3 页
字号:
</td></tr></table><table width=100% ><tr><td class=a14>
    DWORD GetMinorVersion ()</td></tr></table><table width=100% ><tr><td class=a14>
    {</td></tr></table><table width=100% ><tr><td class=a14>
        return m_dwMinor;</td></tr></table><table width=100% ><tr><td class=a14>
    }</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    DWORD GetBuildNumber ()</td></tr></table><table width=100% ><tr><td class=a14>
    {</td></tr></table><table width=100% ><tr><td class=a14>
        return m_dwBuild;</td></tr></table><table width=100% ><tr><td class=a14>
    }</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    BOOL IsValid ()</td></tr></table><table width=100% ><tr><td class=a14>
    {</td></tr></table><table width=100% ><tr><td class=a14>
        return m_bValid;</td></tr></table><table width=100% ><tr><td class=a14>
    }</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
private:</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    BOOL GetDLLVersion (LPSTR szDLLFileName, </td></tr></table><table width=100% ><tr><td class=a14>
                        DWORD &dwMajor, DWORD &dwMinor, DWORD &dwBuildNumber);</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    BOOL CheckFileVersion (LPSTR szFileName, FileLocationType FileLoc, </td></tr></table><table width=100% ><tr><td class=a14>
                           DWORD &dwMajor, DWORD &dwMinor, DWORD &dwBuildNumber);</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    BOOL ParseVersionString (LPSTR lpVersion, </td></tr></table><table width=100% ><tr><td class=a14>
                             DWORD &dwMajor, DWORD &dwMinor, DWORD &dwBuildNumber);</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    BOOL FixFilePath (char * szFileName, FileLocationType FileLoc);</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    DWORD   m_dwMajor,      // Major version number</td></tr></table><table width=100% ><tr><td class=a14>
            m_dwMinor,      // Minor version number</td></tr></table><table width=100% ><tr><td class=a14>
            m_dwBuild;      // Build number</td></tr></table><table width=100% ><tr><td class=a14>
    BOOL    m_bValid;       // Is the DLL version information valid ?</td></tr></table><table width=100% ><tr><td class=a14>
};</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
#endif</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
这里是实现部分:</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
#include "DLLVersion.h"</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
/**********************************************************</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
   Function:   GetDLLVersion</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
   Purpose:    Retrieves DLL major version, minor version and build numbers</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
   Input:      DLL file name</td></tr></table><table width=100% ><tr><td class=a14>
               Reference to Major number </td></tr></table><table width=100% ><tr><td class=a14>
               Reference to Minor number </td></tr></table><table width=100% ><tr><td class=a14>
               Reference to Build number </td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
   Output:     TRUE only if successful</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
   Remarks:    This function first tries to get the DLL version the nice way,</td></tr></table><table width=100% ><tr><td class=a14>
               that is, call the DllGetVersion function in the DLL.</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
               If this fails, it tries to located the DLL file in the file system,</td></tr></table><table width=100% ><tr><td class=a14>
               read the file information block and retrieve the file version.</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
****************************************************************************/</td></tr></table><table width=100% ><tr><td class=a14>
BOOL CDLLVersion::GetDLLVersion (LPSTR szDLLFileName, </td></tr></table><table width=100% ><tr><td class=a14>
                                 DWORD &dwMajor, DWORD &dwMinor, DWORD &dwBuildNumber)</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
HINSTANCE   hDllInst;           // Instance of loaded DLL</td></tr></table><table width=100% ><tr><td class=a14>
char szFileName [_MAX_PATH];    // Temp file name</td></tr></table><table width=100% ><tr><td class=a14>
BOOL bRes = TRUE;               // Result</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    lstrcpy (szFileName, szDLLFileName);    // Save a file name copy for the loading</td></tr></table><table width=100% ><tr><td class=a14>
    hDllInst = LoadLibrary(TEXT(szFileName));   //load the DLL</td></tr></table><table width=100% ><tr><td class=a14>
    if(hDllInst) {  // Could successfully load the DLL</td></tr></table><table width=100% ><tr><td class=a14>
        DLLGETVERSIONPROC pDllGetVersion;</td></tr></table><table width=100% ><tr><td class=a14>
        /*</td></tr></table><table width=100% ><tr><td class=a14>
        You must get this function explicitly because earlier versions of the DLL </td></tr></table><table width=100% ><tr><td class=a14>
        don't implement this function. That makes the lack of implementation of the </td></tr></table><table width=100% ><tr><td class=a14>
        function a version marker in itself.</td></tr></table><table width=100% ><tr><td class=a14>
        */</td></tr></table><table width=100% ><tr><td class=a14>
        pDllGetVersion = (DLLGETVERSIONPROC) GetProcAddress(hDllInst,</td></tr></table><table width=100% ><tr><td class=a14>
                          TEXT("DllGetVersion"));</td></tr></table><table width=100% ><tr><td class=a14>
   </td></tr></table><table width=100% ><tr><td class=a14>
        if(pDllGetVersion) {    // DLL supports version retrieval function</td></tr></table><table width=100% ><tr><td class=a14>
            DLLVERSIONINFO    dvi;</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
            ZeroMemory(&dvi, sizeof(dvi));</td></tr></table><table width=100% ><tr><td class=a14>
            dvi.cbSize = sizeof(dvi);</td></tr></table><table width=100% ><tr><td class=a14>
            HRESULT hr = (*pDllGetVersion)(&dvi);</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
            if(SUCCEEDED(hr)) { // Finally, the version is at our hands</td></tr></table><table width=100% ><tr><td class=a14>
                dwMajor = dvi.dwMajorVersion;</td></tr></table><table width=100% ><tr><td class=a14>
                dwMinor = dvi.dwMinorVersion;</td></tr></table><table width=100% ><tr><td class=a14>
                dwBuildNumber = dvi.dwBuildNumber;</td></tr></table><table width=100% ><tr><td class=a14>
            } else</td></tr></table><table width=100% ><tr><td class=a14>
                bRes = FALSE;   // Failure</td></tr></table><table width=100% ><tr><td class=a14>
        } else  // GetProcAddress failed, the DLL cannot tell its version</td></tr></table><table width=100% ><tr><td class=a14>
            bRes = FALSE;       // Failure</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
        FreeLibrary(hDllInst);  // Release DLL</td></tr></table><table width=100% ><tr><td class=a14>
    } else  </td></tr></table><table width=100% ><tr><td class=a14>
        bRes = FALSE;   // DLL could not be loaded</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    if (!bRes) // Cannot read DLL version the nice way </td></tr></table><table width=100% ><tr><td class=a14>
        return CheckFileVersion (szFileName, SYS_DIR, </td></tr></table><table width=100% ><tr><td class=a14>
                                 dwMajor, dwMinor, dwBuildNumber); // Try the ugly way</td></tr></table><table width=100% ><tr><td class=a14>
    else</td></tr></table><table width=100% ><tr><td class=a14>
        return TRUE;</td></tr></table><table width=100% ><tr><td class=a14>
}</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
/***************************************************************************</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
   Function:   CheckFileVersion</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
   Purpose:    Check the version information of a given file</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
   Input:      File name</td></tr></table><table width=100% ><tr><td class=a14>
               File location (Windows dir, System dir, Current dir or none)</td></tr></table><table width=100% ><tr><td class=a14>
               Reference to Major number </td></tr></table><table width=100% ><tr><td class=a14>
               Reference to Minor number </td></tr></table><table width=100% ><tr><td class=a14>
               Reference to Build number </td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
   Output:     TRUE only if successful</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
   Remarks:    Trashes original file name</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
****************************************************************************/</td></tr></table><table width=100% ><tr><td class=a14>
BOOL CDLLVersion::CheckFileVersion (LPSTR szFileName, FileLocationType FileLoc, </td></tr></table><table width=100% ><tr><td class=a14>
                                    DWORD &dwMajor, DWORD &dwMinor, </td></tr></table><table width=100% ><tr><td class=a14>
                                    DWORD &dwBuildNumber)</td></tr></table><table width=100% ><tr><td class=a14>
{</td></tr></table><table width=100% ><tr><td class=a14>
LPSTR   lpVersion;			            // String pointer to 'version' text</td></tr></table><table width=100% ><tr><td class=a14>
UINT    uVersionLen;</td></tr></table><table width=100% ><tr><td class=a14>
DWORD   dwVerHnd=0;			            // An 'ignored' parameter, always '0'</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    FixFilePath (szFileName, FileLoc);  // Add necessary path prefix to file name</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    DWORD dwVerInfoSize = GetFileVersionInfoSize (szFileName, &dwVerHnd);</td></tr></table><table width=100% ><tr><td class=a14>
    if (!dwVerInfoSize)     // Cannot reach the DLL file</td></tr></table><table width=100% ><tr><td class=a14>
        return FALSE;</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    LPSTR lpstrVffInfo = </td></tr></table><table width=100% ><tr><td class=a14>
           (LPSTR) malloc (dwVerInfoSize);  // Alloc memory for file info</td></tr></table><table width=100% ><tr><td class=a14>
    if (lpstrVffInfo == NULL)</td></tr></table><table width=100% ><tr><td class=a14>
        return FALSE;   // Allocation failed</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
        // Try to get the info</td></tr></table><table width=100% ><tr><td class=a14>
    if (!GetFileVersionInfo(szFileName, dwVerHnd, dwVerInfoSize, lpstrVffInfo)) {</td></tr></table><table width=100% ><tr><td class=a14>
        free (lpstrVffInfo);</td></tr></table><table width=100% ><tr><td class=a14>
        return FALSE;   // Cannot read the file information - </td></tr></table><table width=100% ><tr><td class=a14>
                        // wierd, since we could read the information size</td></tr></table><table width=100% ><tr><td class=a14>
    }</td></tr></table><table width=100% ><tr><td class=a14>
		/* The below 'hex' value looks a little confusing, but</td></tr></table><table width=100% ><tr><td class=a14>
		   essentially what it is, is the hexidecimal representation</td></tr></table><table width=100% ><tr><td class=a14>
		   of a couple different values that represent the language</td></tr></table><table width=100% ><tr><td class=a14>
		   and character set that we are wanting string values for.</td></tr></table><table width=100% ><tr><td class=a14>
		   040904E4 is a very common one, because it means:</td></tr></table><table width=100% ><tr><td class=a14>
			 US English, Windows MultiLingual characterset</td></tr></table><table width=100% ><tr><td class=a14>
		   Or to pull it all apart:</td></tr></table><table width=100% ><tr><td class=a14>
		   04------        = SUBLANG_ENGLISH_USA</td></tr></table><table width=100% ><tr><td class=a14>
		   --09----        = LANG_ENGLISH</td></tr></table><table width=100% ><tr><td class=a14>
		   ----04E4 = 1252 = Codepage for Windows:Multilingual</td></tr></table><table width=100% ><tr><td class=a14>
        */</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    if (!VerQueryValue (    lpstrVffInfo,  </td></tr></table><table width=100% ><tr><td class=a14>
                (LPSTR) (TEXT("\\StringFileInfo\\040904E4\\FileVersion")), </td></tr></table><table width=100% ><tr><td class=a14>
                (LPVOID *)&lpVersion, (UINT *)&uVersionLen)) {</td></tr></table><table width=100% ><tr><td class=a14>
        free (lpstrVffInfo);</td></tr></table><table width=100% ><tr><td class=a14>
        return FALSE;     // Query was unsuccessful</td></tr></table><table width=100% ><tr><td class=a14>
    }</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    // Now we have a string that looks like this :</td></tr></table><table width=100% ><tr><td class=a14>
    // "MajorVersion.MinorVersion.BuildNumber", so let's parse it</td></tr></table><table width=100% ><tr><td class=a14>
</td></tr></table><table width=100% ><tr><td class=a14>
    BOOL bRes = ParseVersionString (lpVersion, dwMajor, dwMinor, dwBuildNumber);</td></tr></table><table width=100% ><tr><td class=a14>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -