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

📄 samisc.cpp

📁 通用的数据库中间库
💻 CPP
字号:
// samisc.cpp////////////////////////////////////////////////////////////////////////#include <SQLAPI.h>#include "samisc.h"#include <assert.h>#include <stdio.h>#include <string.h>
#include <stdlib.h>	// strtol

#include "errmsg.h"long SAExtractVersionFromString(const SAString &sVerString){	// find first #.# and treat it as version	SAChar *sMajor = NULL, *sMinor = NULL;	short nMajor = 0, nMinor = 0;	const SAChar *s = sVerString;
	SAChar *p = (SAChar *)s;	while(p)	{		sMajor = sa_strpbrk(p, _SA("0123456789"));		if(!sMajor)			break;		nMajor = (short)sa_strtol(sMajor, &p, 10);		if(*p != _SA('.') && *p != _SA(','))			continue;
		sMinor = sa_strpbrk(p, _SA("0123456789"));		if(sMinor != p+1 && (sMinor != p+2 && *(p-1) != _SA(' ')))			break;		nMinor = (short)sa_strtol(sMinor, &p, 10);		break;	}	bool bOk = sMajor != NULL && sMinor != NULL;	return bOk? SA_MAKELONG(nMinor, nMajor) : 0;}
#if defined(_WINDOWS) || defined(WIN32)
void *SAGetVersionInfo(LPCTSTR sDLLName){	DWORD dwHandle;	DWORD dwLen  = ::GetFileVersionInfoSize(		(LPTSTR)sDLLName, &dwHandle);
	if(!dwLen)
		throw SAException(SA_Library_Error, -1, -1, IDS_GET_LIBRARY_VERSION_FAILS, sDLLName);
	void *lpData = malloc(dwLen);	if(!::GetFileVersionInfo(		(LPTSTR)sDLLName,		dwHandle, dwLen, lpData))	{		if(lpData)
			free(lpData);

		throw SAException(SA_Library_Error, -1, -1, IDS_GET_LIBRARY_VERSION_FAILS, sDLLName);	}	return lpData;}long SAGetFileVersionFromString(LPCTSTR sDLLName){	void *lpData = SAGetVersionInfo(sDLLName);	WORD* ppTranslation[2];	UINT uLen;	BOOL bOk = ::VerQueryValue(lpData,		_SA("\\VarFileInfo\\Translation"), (void**)&ppTranslation, &uLen);	bOk = bOk && uLen >= 4;	SAChar s[256];	if(bOk)		sa_sprintf(s, _SA("StringFileInfo\\%.4x%.4x\\FileVersion"), ppTranslation[0][0], ppTranslation[0][1]);	SAChar *sProductVersion = NULL;	bOk = bOk && ::VerQueryValue(lpData,		s, (void**)&sProductVersion, &uLen);	if(!bOk)	{		if(lpData)
			::free(lpData);

		throw SAException(SA_Library_Error, -1, -1, IDS_GET_LIBRARY_VERSION_FAILS, sDLLName);	}	long nVersion = ::SAExtractVersionFromString(sProductVersion);	if(lpData)
		::free(lpData);
	return nVersion;}long SAGetProductVersion(LPCTSTR sDLLName){	void *lpData = SAGetVersionInfo(sDLLName);	VS_FIXEDFILEINFO *pVS_FIXEDFILEINFO;	UINT uLen;	BOOL bOk = ::VerQueryValue(lpData, _SA("\\"), (void**)&pVS_FIXEDFILEINFO, &uLen);	if(!bOk)	{		if(lpData)
			::free(lpData);

		throw SAException(SA_Library_Error, -1, -1, IDS_GET_LIBRARY_VERSION_FAILS, sDLLName);	}	long nVersion = pVS_FIXEDFILEINFO->dwProductVersionMS;	if(lpData)
		::free(lpData);
	return nVersion;}#endif	// defined(_WINDOWS) || defined(WIN32)

⌨️ 快捷键说明

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