Jelajahi Sumber

WxService服务端添加WxAdoInterface库。

Jeff 6 tahun lalu
induk
melakukan
e99cea3fe8

+ 1 - 0
source/hook/WeChats/Global.cpp

@@ -8,6 +8,7 @@ using namespace std;
 #include <psapi.h>
 #pragma comment(lib,"Psapi.lib")
 #include <locale.h>
+#include <io.h>//_access头文件;
 
 TCHAR g_szModulePath[MAX_PATH] = _T("");			// 软件目录;
 TCHAR g_szModuleFileName[MAX_PATH] = _T("");		// 软件名称;

+ 3 - 2
source/hook/WeChats/WeChats.vcxproj

@@ -14,20 +14,21 @@
     <ProjectGuid>{7704A546-A786-41C8-B22A-04BC05AE4F82}</ProjectGuid>
     <RootNamespace>WeChats</RootNamespace>
     <Keyword>MFCProj</Keyword>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <PlatformToolset>v141</PlatformToolset>
     <UseOfMfc>Dynamic</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
+    <CharacterSet>MultiByte</CharacterSet>
     <WholeProgramOptimization>true</WholeProgramOptimization>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <PlatformToolset>v141</PlatformToolset>
     <UseOfMfc>Dynamic</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
+    <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">

+ 20 - 2
source/hook/WeChats2017.sln

@@ -1,7 +1,7 @@
 
 Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 15
-VisualStudioVersion = 15.0.28307.271
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.28407.52
 MinimumVisualStudioVersion = 10.0.40219.1
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "hook", "hook\hook.vcxproj", "{4E160416-52D6-454E-943D-4DD7E1150D25}"
 EndProject
@@ -9,24 +9,42 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WeChats", "WeChats\WeChats.
 EndProject
 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WxService", "WxService\WxService.vcxproj", "{F6D9B47B-95FF-4A7D-BA72-F33A0506BE21}"
 EndProject
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WxAdoInterface", "WxAdoInterface\WxAdoInterface.vcxproj", "{B3C0BF00-C99D-4CC1-BABE-842914F0D9D6}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Win32 = Debug|Win32
+		Debug|x64 = Debug|x64
 		Release|Win32 = Release|Win32
+		Release|x64 = Release|x64
 	EndGlobalSection
 	GlobalSection(ProjectConfigurationPlatforms) = postSolution
 		{4E160416-52D6-454E-943D-4DD7E1150D25}.Debug|Win32.ActiveCfg = Debug|Win32
 		{4E160416-52D6-454E-943D-4DD7E1150D25}.Debug|Win32.Build.0 = Debug|Win32
+		{4E160416-52D6-454E-943D-4DD7E1150D25}.Debug|x64.ActiveCfg = Debug|Win32
 		{4E160416-52D6-454E-943D-4DD7E1150D25}.Release|Win32.ActiveCfg = Release|Win32
 		{4E160416-52D6-454E-943D-4DD7E1150D25}.Release|Win32.Build.0 = Release|Win32
+		{4E160416-52D6-454E-943D-4DD7E1150D25}.Release|x64.ActiveCfg = Release|Win32
 		{7704A546-A786-41C8-B22A-04BC05AE4F82}.Debug|Win32.ActiveCfg = Debug|Win32
 		{7704A546-A786-41C8-B22A-04BC05AE4F82}.Debug|Win32.Build.0 = Debug|Win32
+		{7704A546-A786-41C8-B22A-04BC05AE4F82}.Debug|x64.ActiveCfg = Debug|Win32
 		{7704A546-A786-41C8-B22A-04BC05AE4F82}.Release|Win32.ActiveCfg = Release|Win32
 		{7704A546-A786-41C8-B22A-04BC05AE4F82}.Release|Win32.Build.0 = Release|Win32
+		{7704A546-A786-41C8-B22A-04BC05AE4F82}.Release|x64.ActiveCfg = Release|Win32
 		{F6D9B47B-95FF-4A7D-BA72-F33A0506BE21}.Debug|Win32.ActiveCfg = Debug|Win32
 		{F6D9B47B-95FF-4A7D-BA72-F33A0506BE21}.Debug|Win32.Build.0 = Debug|Win32
+		{F6D9B47B-95FF-4A7D-BA72-F33A0506BE21}.Debug|x64.ActiveCfg = Debug|Win32
 		{F6D9B47B-95FF-4A7D-BA72-F33A0506BE21}.Release|Win32.ActiveCfg = Release|Win32
 		{F6D9B47B-95FF-4A7D-BA72-F33A0506BE21}.Release|Win32.Build.0 = Release|Win32
+		{F6D9B47B-95FF-4A7D-BA72-F33A0506BE21}.Release|x64.ActiveCfg = Release|Win32
+		{B3C0BF00-C99D-4CC1-BABE-842914F0D9D6}.Debug|Win32.ActiveCfg = Debug|Win32
+		{B3C0BF00-C99D-4CC1-BABE-842914F0D9D6}.Debug|Win32.Build.0 = Debug|Win32
+		{B3C0BF00-C99D-4CC1-BABE-842914F0D9D6}.Debug|x64.ActiveCfg = Debug|x64
+		{B3C0BF00-C99D-4CC1-BABE-842914F0D9D6}.Debug|x64.Build.0 = Debug|x64
+		{B3C0BF00-C99D-4CC1-BABE-842914F0D9D6}.Release|Win32.ActiveCfg = Release|Win32
+		{B3C0BF00-C99D-4CC1-BABE-842914F0D9D6}.Release|Win32.Build.0 = Release|Win32
+		{B3C0BF00-C99D-4CC1-BABE-842914F0D9D6}.Release|x64.ActiveCfg = Release|x64
+		{B3C0BF00-C99D-4CC1-BABE-842914F0D9D6}.Release|x64.Build.0 = Release|x64
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

+ 47 - 7
source/hook/WxService/Global.cpp

@@ -28,7 +28,8 @@ namespace Global
 	TCHAR g_szDBPassWord[MAX_PATH];				// 数据库登录密码;
 	TCHAR g_szDBName[MAX_PATH];					// 数据库名称;	
 
-	CHAR g_szKeyPath[MAX_PATH];					// 加密狗USB位置;
+	DWORD g_dwDBPoolMaxCount = 1;						// 数据库连接池最大对象数;
+	DWORD g_dwDBPoolDef = 1;							// 数据库连接池默认对象数;
 
 	//////////////////////////////////////////////////////////////////////////
 	static const int BEGIN_YEAR = 1901;
@@ -159,6 +160,21 @@ namespace Global
 			return -1;
 		}
 
+		// 获取服务器端信息;
+		//GetPrivateProfileString(_T("DatabaseInfo"), _T("dbSource"), _T(""), g_szDBSource, MAX_PATH, szIniPath);
+		//g_dwDBServerPort = GetPrivateProfileInt(_T("DatabaseInfo"), _T("dbServerPort"), 0, szIniPath);
+		//GetPrivateProfileString(_T("DatabaseInfo"), _T("dbAccount"), _T(""), g_szDBAccount, MAX_PATH, szIniPath);
+		//GetPrivateProfileString(_T("DatabaseInfo"), _T("dbPassWord"), _T(""), g_szDBPassWord, MAX_PATH, szIniPath);
+		//GetPrivateProfileString(_T("DatabaseInfo"), _T("dbName"), _T(""), g_szDBName, MAX_PATH, szIniPath);
+
+		////g_dwCSPort = GetPrivateProfileInt(_T("NetWorkInfo"), _T("TCPChatPort"), 5678, szIniPath);
+
+		//if (g_dwDBServerPort != 0)
+		//	StringCchPrintf(g_szConnectString, MAX_PATH, _T("driver={SQL Server};Server=%s,%d;database=%s;uid=%s;pwd=%s"),
+		//	g_szDBSource, g_dwDBServerPort, g_szDBName, g_szDBAccount, g_szDBPassWord);
+		//else
+		//	StringCchPrintf(g_szConnectString, MAX_PATH, _T("driver={SQL Server};Server=%s;database=%s;uid=%s;pwd=%s"),
+		//	g_szDBSource, g_szDBName, g_szDBAccount, g_szDBPassWord);
 		// 获取服务器端信息;
 		GetPrivateProfileString(_T("DatabaseInfo"), _T("dbSource"), _T(""), g_szDBSource, MAX_PATH, szIniPath);
 		g_dwDBServerPort = GetPrivateProfileInt(_T("DatabaseInfo"), _T("dbServerPort"), 0, szIniPath);
@@ -166,14 +182,38 @@ namespace Global
 		GetPrivateProfileString(_T("DatabaseInfo"), _T("dbPassWord"), _T(""), g_szDBPassWord, MAX_PATH, szIniPath);
 		GetPrivateProfileString(_T("DatabaseInfo"), _T("dbName"), _T(""), g_szDBName, MAX_PATH, szIniPath);
 
-		//g_dwCSPort = GetPrivateProfileInt(_T("NetWorkInfo"), _T("TCPChatPort"), 5678, szIniPath);
-
+		g_dwDBPoolMaxCount = GetPrivateProfileInt(_T("DatabaseInfo"), _T("dbpoolMaxObj"), 1, szIniPath);
+		g_dwDBPoolDef = GetPrivateProfileInt(_T("DatabaseInfo"), _T("dbpoolDef"), 1, szIniPath);
+		//g_dwSvrPort = GetPrivateProfileInt(_T("NetWorkInfo"), _T("TCPChatPort"), 0, szIniPath);
 		if (g_dwDBServerPort != 0)
-			StringCchPrintf(g_szConnectString, MAX_PATH, _T("driver={SQL Server};Server=%s,%d;database=%s;uid=%s;pwd=%s"),
-			g_szDBSource, g_dwDBServerPort, g_szDBName, g_szDBAccount, g_szDBPassWord);
+		{
+			if (_tcscmp(g_szDBAccount, _T("")) == 0)
+				_stprintf_s(g_szConnectString, DB_SW_CONN_WITH_PORT, g_szDBSource, g_dwDBServerPort, g_szDBName);
+			else
+				_stprintf_s(g_szConnectString, DB_SS_CONN_WITH_PORT, g_szDBSource, g_dwDBServerPort, g_szDBName, g_szDBAccount, g_szDBPassWord);
+
+			_stprintf_s(g_szConnectString,
+				_T("Provider=sqloledb;Data Source=%s,%ld;Initial Catalog=%s;User Id=%s;Password=%s; "),
+				g_szDBSource,			// IP地址或服务名称;
+				g_dwDBServerPort,
+				g_szDBName,
+				g_szDBAccount,
+				g_szDBPassWord);
+		}
 		else
-			StringCchPrintf(g_szConnectString, MAX_PATH, _T("driver={SQL Server};Server=%s;database=%s;uid=%s;pwd=%s"),
-			g_szDBSource, g_szDBName, g_szDBAccount, g_szDBPassWord);
+		{
+			if (_tcscmp(g_szDBAccount, _T("")) == 0)
+				_stprintf_s(g_szConnectString, DB_SW_CONN_WITHOUT_PORT, g_szDBSource, g_szDBName);
+			else
+				_stprintf_s(g_szConnectString, DB_SS_CONN_WITHOUT_PORT, g_szDBSource, g_szDBName, g_szDBAccount, g_szDBPassWord);
+
+			_stprintf_s(g_szConnectString,
+				_T("Provider=sqloledb;Data Source=%s;Initial Catalog=%s;User Id=%s;Password=%s; "),
+				g_szDBSource,			// IP地址或服务名称;
+				g_szDBName,
+				g_szDBAccount,
+				g_szDBPassWord);
+		}
 
 		return 0;
 	}

+ 9 - 2
source/hook/WxService/Global.h

@@ -33,6 +33,12 @@ typedef wstring TString;
 
 namespace Global
 {
+	#define DB_SS_CONN_WITH_PORT		_T("driver={SQL Server};Server=%s,%d;database=%s;uid=%s;pwd=%s")
+	#define DB_SS_CONN_WITHOUT_PORT		_T("driver={SQL Server};Server=%s;database=%s;uid=%s;pwd=%s")
+	#define DB_SS_CONN_WITHOUT_PORT2	_T("driver={SQL Server};Server=%s;database=%d;uid=%s;pwd=%s")
+	#define DB_SW_CONN_WITH_PORT		_T("Driver={SQL Server};Server=%s,%d;Database=%s;Trusted_Connection=yes;")
+	#define DB_SW_CONN_WITHOUT_PORT		_T("Driver={SQL Server};Server=%s;Database=%s;Trusted_Connection=yes;")
+	#define DB_SW_CONN_WITHOUT_PORT2	_T("Driver={SQL Server};Server=%s;Database=%d;Trusted_Connection=yes;")
 	//////////////////////////////////////////////////////////////////////////
 	// 全局变量;
 	//////////////////////////////////////////////////////////////////////////
@@ -50,8 +56,9 @@ namespace Global
 	extern TCHAR g_szDBAccount[MAX_PATH];			// 数据库登录用户;
 	extern TCHAR g_szDBPassWord[MAX_PATH];			// 数据库登录密码;
 	extern TCHAR g_szDBName[MAX_PATH];				// 数据库名称;	
-
-	extern CHAR g_szKeyPath[MAX_PATH];				// 加密狗USB位置;
+	
+	extern DWORD g_dwDBPoolMaxCount;				// 数据库连接池最大对象数;
+	extern DWORD g_dwDBPoolDef;						// 数据库连接池默认对象数;
 
 	//////////////////////////////////////////////////////////////////////////
 	// 全局函数;

+ 17 - 3
source/hook/WxService/WxService.cpp

@@ -19,9 +19,23 @@ using namespace std;
 // 工作启动回调函数;
 void CALLBACK WorkStart()
 {
-#ifdef _DEBUG
-	Sleep(8000);
-#endif
+	if (CreatePoolInstance())
+	{
+		// 尝试10次启动;
+		INT i = 10;
+		while (0 == g_pAdoPool->InitializePool(Global::g_szDBSource, Global::g_dwDBServerPort, Global::g_szDBAccount, Global::g_szDBPassWord, Global::g_szDBName, Global::g_dwDBPoolDef, Global::g_dwDBPoolMaxCount))
+		{
+			Sleep(5000);
+			if (i < 0)
+			{
+				break;
+			}
+			i--;
+		}
+	}
+
+	
+
 	WinService::GetDebugPriv();
 	CMainProcess::GetInstance()->StartWork();
 }

+ 3 - 2
source/hook/WxService/WxService.vcxproj

@@ -14,20 +14,21 @@
     <ProjectGuid>{F6D9B47B-95FF-4A7D-BA72-F33A0506BE21}</ProjectGuid>
     <RootNamespace>WxService</RootNamespace>
     <Keyword>Win32Proj</Keyword>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <PlatformToolset>v141</PlatformToolset>
     <UseOfMfc>Dynamic</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
+    <CharacterSet>MultiByte</CharacterSet>
     <WholeProgramOptimization>true</WholeProgramOptimization>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
     <ConfigurationType>Application</ConfigurationType>
     <PlatformToolset>v141</PlatformToolset>
     <UseOfMfc>Dynamic</UseOfMfc>
-    <CharacterSet>Unicode</CharacterSet>
+    <CharacterSet>MultiByte</CharacterSet>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
   <ImportGroup Label="ExtensionSettings">

+ 28 - 0
source/hook/WxService/stdafx.cpp

@@ -6,3 +6,31 @@
 
 // TODO: 在 STDAFX.H 中
 // 引用任何所需的附加头文件,而不是在此文件中引用
+HMODULE g_hpool = NULL;
+IWxAdoInterface* g_pAdoPool = NULL;
+typedef IWxAdoInterface* (*CREATEINSTANCE)();
+BOOL CreatePoolInstance()
+{   //加载动态库
+	g_hpool = (HMODULE)LoadLibrary(_T("WxAdoInterface.dll"));
+	if (g_hpool == NULL)
+	{
+		CString strError = _T("");
+		strError.Format(_T("error = %d"), GetLastError());
+		//AfxMessageBox(strError);
+		return FALSE;
+	}
+
+	CREATEINSTANCE CreaetInstance = (CREATEINSTANCE)GetProcAddress(g_hpool, "CreateWxAdoPoolInstance");
+	g_pAdoPool = CreaetInstance();
+
+	return (g_pAdoPool == NULL) ? FALSE : TRUE;
+}
+
+void FreelyfzodbcLibrary()
+{
+	if (g_hpool)
+		FreeLibrary(g_hpool);
+
+	g_hpool = NULL;
+	g_pAdoPool = NULL;
+}

+ 16 - 0
source/hook/WxService/stdafx.h

@@ -29,5 +29,21 @@
 #include "WinService.h"
 #include "Global.h"
 
+#include "../WxAdoInterface/IWxAdoInterface.h"
+#include "../WxAdoInterface/WxAdoImpl.h"
+//#include "../lzmalib/LzmaLib.h"
+//#include "../lzmalib/Types.h"
+
+#ifdef _DEBUG
+#pragma comment(lib,"WxAdoInterface.lib")
+//#pragma comment(lib,"../lzmalib/LzmaLib_D.lib")
+#else
+#pragma comment(lib,"WxAdoInterface.lib")
+//#pragma comment(lib,"../lzmalib/LzmaLib.lib")
+#endif
+//#pragma comment(lib,"../lzmalib/LzmaLib.lib")
 
+extern IWxAdoInterface* g_pAdoPool;
+extern BOOL CreatePoolInstance();
+extern void FreelyfzodbcLibrary();
 // TODO: 在此处引用程序需要的其他头文件

+ 2 - 1
source/hook/hook/hook.vcxproj

@@ -14,12 +14,13 @@
     <ProjectGuid>{4E160416-52D6-454E-943D-4DD7E1150D25}</ProjectGuid>
     <RootNamespace>hook</RootNamespace>
     <Keyword>Win32Proj</Keyword>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
   </PropertyGroup>
   <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
     <ConfigurationType>DynamicLibrary</ConfigurationType>
     <PlatformToolset>v141</PlatformToolset>
-    <CharacterSet>Unicode</CharacterSet>
+    <CharacterSet>MultiByte</CharacterSet>
     <WholeProgramOptimization>true</WholeProgramOptimization>
   </PropertyGroup>
   <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">