亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? modulver.cpp

?? 配套《網(wǎng)絡通信編程實用案例精選》源代碼。
?? CPP
字號:
////////////////////////////////////////////////////////////////
// 1998 Microsoft Systems Journal
// If this code works, it was written by Paul DiLascia.
// If not, I don't know who wrote it.
//
// CModuleVersion provides an easy way to get version info
// for a module.(DLL or EXE).
//
#include "StdAfx.h"
#include "ModulVer.h"

CModuleVersion::CModuleVersion()
{
   m_pVersionInfo = NULL;           // raw version info data 
}

//////////////////
// Destroy: delete version info
//
CModuleVersion::~CModuleVersion()
{
   delete [] m_pVersionInfo;
}

//////////////////
// Get file version info for a given module
// Allocates storage for all info, fills "this" with
// VS_FIXEDFILEINFO, and sets codepage.
//
BOOL CModuleVersion::GetFileVersionInfo(LPCTSTR modulename)
{
   m_translation.charset = 1252;    // default = ANSI code page
   memset((VS_FIXEDFILEINFO*)this, 0, sizeof(VS_FIXEDFILEINFO));

   // get module handle
   TCHAR filename[_MAX_PATH];
   HMODULE hModule = ::GetModuleHandle(modulename);
   if (hModule==NULL && modulename!=NULL)
      return FALSE;

   // get module file name
   DWORD len = GetModuleFileName(hModule, filename,
      sizeof(filename)/sizeof(filename[0]));
   if (len <= 0)
      return FALSE;

   // 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);
   }

   return dwSignature == VS_FFI_SIGNATURE;
}

BOOL CModuleVersion::GetDLLVersionInfo(LPTSTR filename)
{
   m_translation.charset = 1252;    // default = ANSI code page
   memset((VS_FIXEDFILEINFO*)this, 0, sizeof(VS_FIXEDFILEINFO));

   // get module handle
   HMODULE hModule = LoadLibrary(filename);
   if (hModule==NULL) return FALSE;

   // read file version info
   DWORD dwDummyHandle; // will always be set to zero
   DWORD len = GetFileVersionInfoSize(filename, &dwDummyHandle);
   if (len <= 0)
   {
	   FreeLibrary(hModule);
	   return FALSE;
   }

   m_pVersionInfo = new BYTE[len]; // allocate version info
   if (!::GetFileVersionInfo(filename, 0, len, m_pVersionInfo))
   {
	   FreeLibrary(hModule);
	   return FALSE;
   }

   LPVOID lpvi;
   UINT iLen;
   if (!VerQueryValue(m_pVersionInfo, _T("\\"), &lpvi, &iLen))
   {
	   FreeLibrary(hModule);
	   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);
   }
	FreeLibrary(hModule);
	return dwSignature == VS_FFI_SIGNATURE;
}

//////////////////
// Get string file info.
// Key name is something like "CompanyName".
// returns the value as a CString.
//
CString CModuleVersion::GetValue(LPCTSTR lpKeyName)
{
   CString sVal;
   if (m_pVersionInfo) {

      // To get a string value must pass query in the form
      //
      //    "\StringFileInfo\<langID><codepage>\keyname"
      //
      // where <langID><codepage> is the languageID concatenated with the
      // code page, in hex. Wow.
      //
      CString query;
      query.Format(_T("\\StringFileInfo\\%04x%04x\\%s"),
                   m_translation.langID,
                   m_translation.charset,
                   lpKeyName);

      LPCTSTR pVal;
      UINT iLenVal;
      if (VerQueryValue(m_pVersionInfo, (LPTSTR)(LPCTSTR)query,
          (LPVOID*)&pVal, &iLenVal)) {

         sVal = pVal;
      }
   }
   return sVal;
}

// typedef for DllGetVersion proc
typedef HRESULT (CALLBACK* DLLGETVERSIONPROC)(DLLVERSIONINFO *);

/////////////////
// Get DLL Version by calling DLL's DllGetVersion proc
//
BOOL CModuleVersion::DllGetVersion(LPCTSTR modulename, DLLVERSIONINFO& dvi)
{
   HINSTANCE hinst = LoadLibrary(modulename);
   if (!hinst)
      return FALSE;

   // Must use GetProcAddress because the DLL might not implement 
   // DllGetVersion. Depending upon the DLL, the lack of implementation of the 
   // function may be a version marker in itself.
   //
   DLLGETVERSIONPROC pDllGetVersion =
      (DLLGETVERSIONPROC)GetProcAddress(hinst, _T("DllGetVersion"));

   if (!pDllGetVersion)
      return FALSE;

   memset(&dvi, 0, sizeof(dvi));        // clear
   dvi.cbSize = sizeof(dvi);            // set size for Windows

   return SUCCEEDED((*pDllGetVersion)(&dvi));
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜在线视频| 成人黄色av电影| 99久久精品国产导航| 91精品在线麻豆| 一区二区三区中文免费| 成人综合婷婷国产精品久久免费| 欧美日韩午夜影院| 亚洲色图制服诱惑 | 裸体在线国模精品偷拍| 91香蕉视频污| 国产农村妇女精品| 国内精品免费在线观看| 日韩你懂的在线观看| 亚洲一区免费在线观看| 91首页免费视频| 日本一区二区成人| 国产成人超碰人人澡人人澡| 欧美大片一区二区| 免费成人在线视频观看| 9191国产精品| 日精品一区二区| 欧美高清视频www夜色资源网| 亚洲综合免费观看高清完整版在线 | 欧美精品九九99久久| 一区二区三区在线视频播放| 色香蕉成人二区免费| 1024成人网| 色婷婷综合久久久久中文| 亚洲免费伊人电影| 色婷婷综合久久| 亚洲精品成人天堂一二三| 在线中文字幕不卡| 午夜一区二区三区在线观看| 欧美日韩一卡二卡三卡 | 国产成人av电影在线观看| 欧美精品一区二区三区蜜桃视频 | 狠狠色综合播放一区二区| 精品国产3级a| 国产不卡在线视频| 中文字幕一区二区三区四区不卡 | 中文字幕精品三区| av电影在线不卡| 亚洲精品国产a| 欧美日韩另类一区| 久久精品国产**网站演员| 国产喂奶挤奶一区二区三区| 99视频有精品| 午夜久久电影网| wwwwww.欧美系列| 99久久99久久精品免费看蜜桃 | 亚洲欧美一区二区三区孕妇| 欧美亚洲综合一区| 国内外成人在线视频| 国产精品美女久久久久久久久 | 波多野结衣91| 亚洲chinese男男1069| 精品国产1区2区3区| 91在线小视频| 青青草精品视频| 国产精品第一页第二页第三页| 欧美调教femdomvk| 国产麻豆视频精品| 亚洲一区二区在线观看视频| 精品成人私密视频| 在线观看免费亚洲| 国产伦精品一区二区三区免费迷| 亚洲蜜臀av乱码久久精品| 日韩一区二区免费在线观看| 99精品久久只有精品| 免费成人小视频| 亚洲人一二三区| 精品国产乱码久久久久久牛牛| 色婷婷一区二区三区四区| 国内成+人亚洲+欧美+综合在线| 亚洲美女视频在线观看| 2021久久国产精品不只是精品| 在线免费观看成人短视频| 国产麻豆精品在线| 日韩精品乱码免费| 亚洲人成网站在线| 精品国产麻豆免费人成网站| 欧美日韩一区小说| 不卡av在线免费观看| 国产美女在线观看一区| 婷婷六月综合网| 一区二区三区视频在线看| 久久久久久黄色| 欧美成人精品福利| 在线播放国产精品二区一二区四区| eeuss鲁片一区二区三区在线观看| 免费高清视频精品| 亚洲国产日韩在线一区模特| 综合自拍亚洲综合图不卡区| 国产免费观看久久| 精品va天堂亚洲国产| 3d成人h动漫网站入口| 欧美影视一区在线| 色综合久久中文字幕综合网| www.成人网.com| 成年人国产精品| 成人网页在线观看| 国产不卡在线一区| 国产成人精品免费一区二区| 国产精品资源站在线| 紧缚奴在线一区二区三区| 久久精品99国产精品| 日韩**一区毛片| 蜜乳av一区二区| 免费美女久久99| 免费成人小视频| 精品夜夜嗨av一区二区三区| 精品亚洲国内自在自线福利| 精品一区二区三区免费播放| 国产一区二区91| 国产精品 日产精品 欧美精品| 国模大尺度一区二区三区| 国产一区高清在线| 春色校园综合激情亚洲| 91丨九色丨黑人外教| 色综合久久久久久久久| 欧美网站大全在线观看| 91精品国产色综合久久不卡蜜臀 | 欧美mv日韩mv国产网站| 2020国产成人综合网| 国产三级精品三级在线专区| 国产精品美女久久福利网站| 综合激情网...| 亚洲综合免费观看高清完整版| 亚洲成人综合在线| 久久成人精品无人区| 国产精品一区久久久久| 97se亚洲国产综合在线| 欧美日韩中文国产| 精品欧美乱码久久久久久1区2区| 欧美国产精品一区二区| 亚洲精品欧美激情| 久久精品国产在热久久| www.av亚洲| 欧美肥大bbwbbw高潮| 久久久久久免费网| 亚洲精品乱码久久久久久| 日韩av电影免费观看高清完整版| 国产黑丝在线一区二区三区| 日本高清视频一区二区| 日韩亚洲欧美中文三级| ...av二区三区久久精品| 天堂va蜜桃一区二区三区漫画版| 国产精品资源在线观看| 欧美日韩精品是欧美日韩精品| 日韩女同互慰一区二区| 亚洲视频在线一区二区| 蜜臀av在线播放一区二区三区| 成人av免费网站| 欧美一级日韩免费不卡| 亚洲欧美日韩中文字幕一区二区三区 | 大尺度一区二区| 在线不卡免费欧美| 成人欧美一区二区三区1314| 麻豆精品在线视频| 在线亚洲一区二区| 欧美激情资源网| 免费不卡在线观看| 欧美性xxxxxx少妇| 国产精品网站一区| 久久综合综合久久综合| 在线中文字幕一区二区| 中文av一区二区| 精品一区二区三区免费毛片爱| 欧美吞精做爰啪啪高潮| 日韩一区有码在线| 国产成a人亚洲精| 精品久久人人做人人爰| 天天操天天综合网| 色婷婷综合中文久久一本| 亚洲国产成人在线| 国产精品一区二区无线| 精品久久久久久无| 美女网站一区二区| 欧美二区三区91| 亚洲成在线观看| 欧亚一区二区三区| 一区二区三区不卡在线观看| 99久久国产综合精品麻豆| 国产精品三级av| 国产91精品久久久久久久网曝门| 久久婷婷成人综合色| 激情偷乱视频一区二区三区| 欧美不卡123| 久久精品国产久精国产| 日韩精品在线一区二区| 免费看黄色91| 日韩欧美一级二级三级久久久| 午夜精品视频在线观看| 91精品一区二区三区在线观看| 午夜精品福利一区二区三区av | **欧美大码日韩| 色综合天天做天天爱| 亚洲精品国产第一综合99久久 | 东方欧美亚洲色图在线| 国产亚洲成年网址在线观看|