[网狐]内核引擎KernelEngine移植

没有KernelEngine内核源码?

最近跳槽了,现在这家公司用网狐服务器开发的项目,网狐老夫熟悉啊,以前研究过代码,所以工作上手很快,但是很快问题来了,KernelEngine这个Dll居然没.源.码,来让你们也感受一下.
[网狐]内核引擎KernelEngine移植_第1张图片
最后逼的我都要看汇编了,奈何看不懂.
好啦以上是我的心路崩溃历程,最后决定移植其他有源码项目到本项目里,没想到成功了,这就是这篇文章的由来.

开搞

1.新建个文件夹,复制源码工程KernelEngine.vcproj文件到这个文件夹里
[网狐]内核引擎KernelEngine移植_第2张图片

2.我们肯定要弄个新名字不和原来的工程名冲突,类名也要统一改.
我们把新复制过来的KernelEngine.vcproj改成KernelEngineEx.vcproj 以后所有用到的类后面都加上Ex和原工程区分开来.
3.用文本编辑器,打开KernelEngineEx.vcproj 全局替换,KernelEngine全部替换为KernelEngineEx.我用的是notepad++
[网狐]内核引擎KernelEngine移植_第3张图片

4.VC打开工程把文件都清理干净,工程名改成新内核引擎
[网狐]内核引擎KernelEngine移植_第4张图片

5.这里有个宏需要添加一下DECLARE_MODULE_HELPER_EX
……\系统模块\全局定义\Module.h
[网狐]内核引擎KernelEngine移植_第5张图片

//组件辅助类宏
#define DECLARE_MODULE_HELPER_EX(OBJECT_NAME,MODULE_DLL_NAME,CREATE_FUNCTION_NAME)                              \
class C##OBJECT_NAME##ExHelper : public CTempldateHelper#OBJECT_NAME>                            \
{                                                                                                           \
public:                                                                                                     \
    C##OBJECT_NAME##ExHelper() : CTempldateHelper#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 名字
#endif


DECLARE_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 宏定义
[网狐]内核引擎KernelEngine移植_第6张图片

9.拷贝文件并添加入工程并且改名
[网狐]内核引擎KernelEngine移植_第7张图片

10.把所有类名都修改了,后面加上Ex
这里写图片描述

[网狐]内核引擎KernelEngine移植_第8张图片

这里写图片描述

[网狐]内核引擎KernelEngine移植_第9张图片

[网狐]内核引擎KernelEngine移植_第10张图片
11.新建两个def文件
[网狐]内核引擎KernelEngine移植_第11张图片

KernelEngineEx.def

; KernelEngineEx.def : 声明 DLL 的模块参数。

LIBRARY      "KernelEngineEx"

EXPORTS
    ; 此处可以是显式导出

KernelEngineExD.def

; KernelEngineExD.def : 声明 DLL 的模块参数。

LIBRARY      "KernelEngineExD"

EXPORTS
    ; 此处可以是显式导出

好啦,编译成功了,因为是复制没有源码的工程文件KernelEngineEx.vcproj 设置,输出路径肯定是你工程里的,还有一点是,你现在没有源码的工程没被其他人加工过,如果我提供的带源码的工程和你的工程函数不一样那就没办法了.

工程弄好了,我们应用一下,看下效果
1.把新的工程添加到项目里
[网狐]内核引擎KernelEngine移植_第12张图片

2.游戏服务器stdafx.h里添加新的工程导入lib
[网狐]内核引擎KernelEngine移植_第13张图片

#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;   

[网狐]内核引擎KernelEngine移植_第14张图片

4.好了大功告成.F5跑一下看看.
[网狐]内核引擎KernelEngine移植_第15张图片

写在最后

网狐在网上流出的版本太多了,如果我提供的源码工程和你现在用的工程不匹配,那你就只能多找几个版本了.

可能有的朋友要问了,为啥不用带源码的项目开发啊,非要费劲的移植啊,我只能呵呵,公司这个项目开发好久了,不是说换其他版本框架就换的,毕竟现在的版本很稳定,已经趟过好多坑了.

好啦,这里提供我找的源码工程和移植的工程.所以这些移植只是可以让你调试你的程序,找到崩溃的地方,项目还是要用公司原来的不带源码的工程跑.

希望这篇文章能帮助到你

源码下载地址

你可能感兴趣的:([网狐]内核引擎KernelEngine移植)