Visual Studio dll obtener información por su versión

  Ahora DLL compilado, versión más el manejo del estrés exe, puede agregarse mediante la adición de "recurso" versión en el archivo de recursos para el proyecto en Visual Studio, seleccione la entrada "Versión" y, a continuación, modificar "VS_VERSION_INFO" en "FILEVERSION", "PRODUCTVERSION "y añadir el número de versión y otra información.

  Pero después de crear y, a veces es necesario obtener el número de versión en el código, tal como se utiliza en el registro y verificación. Internet para encontrar el método en su caso, encontrar la definición de la macro, el método "GetFileVersionInfo", "FindResource" tres implementaciones de.

definición de la macro

  Cómo obtener el número de versión del archivo VS2013 RC
  a través de cuatro número de versión digital definición de macro en el archivo público, utilice el RC, cpp, pero no puede utilizar el IDE vs archivos de recursos abiertos (RC se graba automáticamente documentos), aquí, utilice la referencia del entorno.

GetFileVersionInfo

  GetFileVersionInfo obtener el número de versión
  VC obtener información sobre la versión de software archivo de recursos en el ... / Versión / VS_VERSION_INFO / valor FILEVERSION es
  necesario GetVersionInfo define aquí para entrar a ser DLL detectado o el nombre del archivo ejecutable, y luego procesado para obtener información sobre la versión, hay que señalar que, Si el problema no se puede vincular GetFileVersionInfoSize como consejos, no se puede introducir "version.lib", además de que puede, como se detalla en el enlazador:
  determinación de no vincular GetFileVersionInfoSize, GetFileVersionInfo o VerQueryValue

FindResource

  La función FindResource ()
  archivo de recursos de la empresa adquirió método FileVersion
  por FindResource, LoadResource dll o exe obtener la información de versión del módulo actual para entrar en el mango.

Ejemplos

  Por encima de GetFileVersionInfo, FindResource puede obtener la información de versión de DLL o EXE, pero que necesitan para obtener el nombre del DLL propio o asa del módulo, si se utiliza de manera DLL internamente, se puede adquirir información de la versión en sí es ahora comúnmente utilizados envoltorio función GetSelfModuleHandle.

// 获取自身句柄
HMODULE GetSelfModuleHandle()
{
	MEMORY_BASIC_INFORMATION mbi;
	return ((::VirtualQuery(GetSelfModuleHandle, &mbi, sizeof(mbi)) != 0) ? (HMODULE)mbi.AllocationBase : NULL);
}

// 获取自身路径
const char* GetSelfPath()
{
	char DllDir[512];
	GetModuleFileNameA(GetSelfModuleHandle(), DllDir, 512);
	std::string StrPath(DllDir);
	size_t index = StrPath.find_last_of("/\\");
	StrPath = StrPath.substr(0, index);
	return StrPath.c_str();
}

  

Ejemplo 1, para obtener información a través de su propia versión GetFileVersionInfo

void GetVersionInfo(char* strVersion)
{
	TCHAR szVersionBuffer[1000] = _T("");
	DWORD dwVerSize;
	DWORD dwHandle;
	dwVerSize = GetFileVersionInfoSizeA(GetSelfPath(), &dwHandle);
	if (dwVerSize == 0)
		return;

	if (GetFileVersionInfoA(GetSelfPath(), 0, dwVerSize, szVersionBuffer))
	{
		VS_FIXEDFILEINFO * pInfo;
		unsigned int nInfoLen;

		if (VerQueryValue(szVersionBuffer, _T("\\"), (void**)&pInfo, &nInfoLen))
		{
			sprintf(strVersion, "%d.%d.%d.%d", 
				HIWORD(pInfo->dwFileVersionMS), LOWORD(pInfo->dwFileVersionMS),
				HIWORD(pInfo->dwFileVersionLS), LOWORD(pInfo->dwFileVersionLS));
			return strVersion;
		}
	}
	
	return;
}

  

Ejemplo 2, para obtener información a través de su propia versión FindResource

void GetVersionInfo(char* strVersion)
{
	HRSRC hsrc = FindResource(GetSelfModuleHandle(), MAKEINTRESOURCE(VS_VERSION_INFO), RT_VERSION);
	HGLOBAL hgbl = LoadResource(GetSelfModuleHandle(), hsrc);
	BYTE *pBt = (BYTE *)LockResource(hgbl);
	VS_FIXEDFILEINFO* pFinfo = (VS_FIXEDFILEINFO*)(pBt + 40);
	sprintf(strVersion, "%d.%d.%d.%d",
		(pFinfo->dwFileVersionMS >> 16) & 0xFF,
		(pFinfo->dwFileVersionMS) & 0xFF,
		(pFinfo->dwFileVersionLS >> 16) & 0xFF,
		(pFinfo->dwFileVersionLS) & 0xFF);
}

  

  

  

Publicado 24 artículos originales · ganado elogios 8 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/yangjf91/article/details/97789118
Recomendado
Clasificación