[网狐]内核引擎KernelEngine移植
来源:互联网 发布:启航网络 编辑:程序博客网 时间:2024/06/03 21:50
没有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移植
- 棋牌内核引擎KernelEngine mc_kernel
- 内核移植
- 内核移植
- 内核移植
- 内核移植
- 内核移植
- 内核移植
- 内核移植
- 内核移植
- 系统移植-内核移植
- 工作流引擎内核入门
- 三个浏览器内核引擎
- 工作流引擎内核入门
- 工作流引擎内核入门
- PHP内核--Zend引擎
- 三个浏览器内核引擎
- 嵌入式Linux内核移植
- 启动Activity并获取返回结果
- 201512-2消除类游戏
- anaconda 中 python2,3 的兼容
- NIO之Buffer、Channel
- ScrollView(Listview)和Viewpager(banner)的冲突解决办法
- [网狐]内核引擎KernelEngine移植
- 判断语句
- 百练+二叉树操作+直接找到父节点,然后交换左右儿子,递归
- Win7下Apache2.4-win64的安装和配置以及启动服务
- 安全从业人员常用工具指引
- 5.1子类继承父类
- Java定时任务的三种实现方法
- Java代码性能分析工具
- 数据库中verchar类型使用SUM()MIN()MAX()