内核引擎KernelEngine移植"/>
[网狐]内核引擎KernelEngine移植
没有KernelEngine内核源码?
最近跳槽了,现在这家公司用网狐服务器开发的项目,网狐老夫熟悉啊,以前研究过代码,所以工作上手很快,但是很快问题来了,KernelEngine这个Dll居然没.源.码,来让你们也感受一下.
最后逼的我都要看汇编了,奈何看不懂.
好啦以上是我的心路崩溃历程,最后决定移植其他有源码项目到本项目里,没想到成功了,这就是这篇文章的由来.
开搞
1.新建个文件夹,复制源码工程KernelEngine.vcproj文件到这个文件夹里
2.我们肯定要弄个新名字不和原来的工程名冲突,类名也要统一改.
我们把新复制过来的KernelEngine.vcproj改成KernelEngineEx.vcproj 以后所有用到的类后面都加上Ex和原工程区分开来.
3.用文本编辑器,打开KernelEngineEx.vcproj 全局替换,KernelEngine全部替换为KernelEngineEx.我用的是notepad++
4.VC打开工程把文件都清理干净,工程名改成新内核引擎
5.这里有个宏需要添加一下DECLARE_MODULE_HELPER_EX
……\系统模块\全局定义\Module.h
//组件辅助类宏
#define DECLARE_MODULE_HELPER_EX(OBJECT_NAME,MODULE_DLL_NAME,CREATE_FUNCTION_NAME) \
class C##OBJECT_NAME##ExHelper : public CTempldateHelper<I##OBJECT_NAME> \
{ \
public: \C##OBJECT_NAME##ExHelper() : CTempldateHelper<I##OBJECT_NAME>(IID_I##OBJECT_NAME, \VER_I##OBJECT_NAME,MODULE_DLL_NAME,CREATE_FUNCTION_NAME) { } \
};
6.创建KernelEngineHeadEx.h头文件
#pragma once//导出定义
#ifndef KERNEL_ENGINE_CLASSEx
#ifdef KERNEL_ENGINE_DLLEx
#define KERNEL_ENGINE_CLASSEx _declspec(dllexport)
#else
#define KERNEL_ENGINE_CLASSEx _declspec(dllimport)
#endif
#endif//模块定义
#ifndef _DEBUG
#define KERNEL_ENGINE_DLL_NAMEEx TEXT("KernelEngineEx.dll") //组件 DLL 名字
#else
#define KERNEL_ENGINE_DLL_NAMEEx TEXT("KernelEngineExD.dll") //组件 DLL 名字
#endifDECLARE_MODULE_HELPER_EX(DataBase,KERNEL_ENGINE_DLL_NAMEEx,"CreateDataBaseEx")
DECLARE_MODULE_HELPER_EX(TimerEngine,KERNEL_ENGINE_DLL_NAMEEx,"CreateTimerEngineEx")
DECLARE_MODULE_HELPER_EX(DataBaseEngine,KERNEL_ENGINE_DLL_NAMEEx,"CreateDataBaseEngineEx")
DECLARE_MODULE_HELPER_EX(AttemperEngine,KERNEL_ENGINE_DLL_NAMEEx,"CreateAttemperEngineEx")
DECLARE_MODULE_HELPER_EX(TCPSocketService,KERNEL_ENGINE_DLL_NAMEEx,"CreateTCPSocketServiceEx")
DECLARE_MODULE_HELPER_EX(WEBSocketService,KERNEL_ENGINE_DLL_NAMEEx,"CreateWEBSocketServiceEx")
DECLARE_MODULE_HELPER_EX(TCPNetworkEngine,KERNEL_ENGINE_DLL_NAMEEx,"CreateTCPNetworkEngineEx")
DECLARE_MODULE_HELPER_EX(UDPNetworkEngine,KERNEL_ENGINE_DLL_NAMEEx,"CreateUDPNetworkEngineEx")
DECLARE_MODULE_HELPER_EX(AsynchronismEngine,KERNEL_ENGINE_DLL_NAMEEx,"CreateAsynchronismEngineEx")
DECLARE_MODULE_HELPER_EX(TraceServiceManager,KERNEL_ENGINE_DLL_NAMEEx,"CreateTraceServiceManagerEx")
7.在stdafx.h 引用原工程KernelEngineHead.h
#include "..\..\服务器组件\内核引擎\KernelEngineHead.h"
8.修改预处理器添加KERNEL_ENGINE_DLLEx 宏定义
9.拷贝文件并添加入工程并且改名
10.把所有类名都修改了,后面加上Ex
11.新建两个def文件
KernelEngineEx.def
; KernelEngineEx.def : 声明 DLL 的模块参数。LIBRARY "KernelEngineEx"EXPORTS; 此处可以是显式导出
KernelEngineExD.def
; KernelEngineExD.def : 声明 DLL 的模块参数。LIBRARY "KernelEngineExD"EXPORTS; 此处可以是显式导出
好啦,编译成功了,因为是复制没有源码的工程文件KernelEngineEx.vcproj 设置,输出路径肯定是你工程里的,还有一点是,你现在没有源码的工程没被其他人加工过,如果我提供的带源码的工程和你的工程函数不一样那就没办法了.
工程弄好了,我们应用一下,看下效果
1.把新的工程添加到项目里
2.游戏服务器stdafx.h里添加新的工程导入lib
#include "..\..\服务器组件\新内核引擎\KernelEngineHeadEx.h"//链接代码#ifndef _DEBUG
#ifndef _UNICODE#pragma comment (lib,"../../链接库/Ansi/KernelEngineEx.lib")
#else#pragma comment (lib,"../../链接库/Unicode/KernelEngineEx.lib")
#endif
#else
#ifndef _UNICODE#pragma comment (lib,"../../链接库/Ansi/KernelEngineExD.lib")
#else#pragma comment (lib,"../../链接库/Unicode/KernelEngineExD.lib")
#endif
3.找到ServieUnits.h 把原来的类声明改成我们加入的新的类
CTimerEngineExHelper m_TimerEngine;
CAttemperEngineExHelper m_AttemperEngine;
4.好了大功告成.F5跑一下看看.
写在最后
网狐在网上流出的版本太多了,如果我提供的源码工程和你现在用的工程不匹配,那你就只能多找几个版本了.
可能有的朋友要问了,为啥不用带源码的项目开发啊,非要费劲的移植啊,我只能呵呵,公司这个项目开发好久了,不是说换其他版本框架就换的,毕竟现在的版本很稳定,已经趟过好多坑了.
好啦,这里提供我找的源码工程和移植的工程.所以这些移植只是可以让你调试你的程序,找到崩溃的地方,项目还是要用公司原来的不带源码的工程跑.
希望这篇文章能帮助到你
源码下载地址
更多推荐
[网狐]内核引擎KernelEngine移植
发布评论