Sqlite
发布时间:2022-05-22 发布网站:大佬教程 code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Nebula2探秘附件:nutildef与nkernelinfo的代码,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
nutildef.h中主要定义了运行Nebula2程序所需要的最小依赖以及简化声明和使用Nebula2对象的工具宏,代码如下:
/*
**************************************************************************
*/
/*
Nebula2-TutorialUtils
*/
/*
nKernelinfo-Nebula2实用工具宏及静态库
*/
/*
author:happykevins
*/
/*
**************************************************************************
*/
#pragma
once
///
----------------------------------------------------------------------------
///
+必要的链接库
#ifdefKS_STATIClink_NEBulA2
#pragma
comment(lib,"wsock32.lib")
#pragma
comment(lib,"dxguID.lib")
#pragma
comment(lib,"dxerr9.lib")
#pragma
comment(lib,"d3d9.lib")
#pragma
comment(lib,"d3dx9d.lib")
#pragma
comment(lib,"dinput8.lib")
#pragma
comment(lib,"ogg_d.lib")
#pragma
comment(lib,"theora_d.lib")
#pragma
comment(lib,"@R_640_5607@d.lib")
#pragma
comment(lib,"d_microtcl.lib")
#pragma
comment(lib,"d_nkernel.lib")
#pragma
comment(lib,"d_nnebula.lib")
#pragma
comment(lib,"d_ntoollib.lib")
#pragma
comment(lib,"d_ngui.lib")
#pragma
comment(lib,"d_ndinput8.lib")
#pragma
comment(lib,"d_ndirect3d9.lib")
#endif
///
-必要的链接库
///
----------------------------------------------------------------------------
///
----------------------------------------------------------------------------
///
+声明Nebula2对象工具宏
///
声明使用指定的Module
#define
nNebulaUseModule(MODulE)
extern
voID
*
n_new_##MODulE(
voID
);
extern
bool
n_init_##MODulE(nClass
*
,nKernelServer
*
);
///
将指定Module添加到KernelServer
#define
nNebulaAddModule(MODulE)
nKernelServer::Instance()
->
AddModule(#MODulE,
n_init_##MODulE,n_new_##MODulE);
///
声明为Nebula2Module
#define
nNebulaModule(CLASS,MODulE,BASEMODulEName)
extern
bool
n_init_##MODulE(nClass
*
clazz,nKernelServer
*
kernelServer);
extern
voID
*
n_new_##MODulE();
bool
n_init_##MODulE(nClass
*
clazz,nKernelServer
*
kernelServer){
clazz
->
SetPropername(#MODulE);
clazz
->
SeTinstanceSize(
sizeof
(CLASS));
kernelServer
->
AddClass(BASEMODulename,clazz);
return
true
;
};
voID
*
n_new_##MODulE(){
return
n_new(CLASS());};
///
命令初始化函数名
#define
nNebulaScripTinitCmds(MODulE)n_initcmds_##MODulE
///
声明为Nebula2脚本Module
#define
nNebulaScriptModule(CLASS,nKernelServer
*
kernelServer);
extern
voID
*
n_new_##MODulE();
extern
voID
n_initcmds_##MODulE(nClass
*
);
bool
n_init_##MODulE(nClass
*
clazz,clazz);
n_initcmds_##MODulE(clazz);
return
true
;
};
voID
*
n_new_##MODulE(){
return
n_new(CLASS());};
///
-声明Nebula2对象工具宏
///
----------------------------------------------------------------------------
nkernelinfo类主要是对第3章代码的整理,目前支持察看Nebula2的Class列表和当前NOH中的对象两项功能。
nkernelinfo.h代码如下:
nkernelinfo.cpp代码如下:
//
nkernelinfo.cpp
#pragma
warning(push)
#pragma
warning(disable:42674244)
#include
"
nkernelinfo.h
"
#include
"
nutildefs.h
"
///
声明为Nebula2脚本支持类
nNebulaScriptModule(nKernelinfoHelper,nkernelinfoHelper,
"
nroot
"
);
///
----------------------------------------------------------------------------
///
+CommonSection
///
///
构造nKernelinfoHelper
nKernelinfoHelper::nKernelinfoHelper(nKernelServer
*
_ks)
:ks(_ks)
{
}
///
设置KernelServer实例
voID
nKernelinfoHelper::SetKernelServer(nKernelServer
*
_ks)
{
this
->
ks
=
_ks;
}
///
将指定NOH分支的当前信息输出到Nebula日至系统
voID
nKernelinfoHelper::LogNOH(
const
char
*
szRootPath)
{
n_assert(ks);
n_assert(szRootPath);
nRoot
*
pRoot
=
ks
->
Lookup(szRootPath);
if
(
!
pRoot)
{
ks_print(
"
--NONE:%s----
"
,szRootPath);
return
;
}
//
内核加锁
ks
->
Lock();
//
打印根节点NOH名
if
(pRoot
->
GetParent())
{
ks_print(
"
%s
"
,pRoot
->
GetFullname().Get());
}
else
{
ks_print(
"
%s
"
,pRoot
->
Getname());
}
//
打印所有子节点
if
(pRoot
->
Gethead())
{
//
层次栈
//
在开始时将根节点入栈
nStack
<
nRoot
*>
deepStack;
deepStack.Push(pRoot
->
Gethead());
//
遍历树
do
{
//
获得当前栈顶元素
nRoot
*
obj
=
deepStack.Pop();
//
打印该元素NOH名
if
(obj
->
GetParent())
{
ks_print(
"
%s
"
,obj
->
GetFullname().Get());
}
else
{
ks_print(
"
%s
"
,obj
->
Getname());
}
//
兄弟节点入栈
if
(obj
->
Islinked()
&&
obj
->
GetSucc())
{
deepStack.Push(obj
->
GetSucc());
}
//
第一个子节点入栈
if
(obj
->
Gethead())
{
deepStack.Push(obj
->
Gethead());
}
}
while
(
!
deepStack.IsEmpty());
}
//
内核解锁
ks
->
Unlock();
}
///
将当前的类列表输出到Nebula日至系统
voID
nKernelinfoHelper::LogCLS()
{
n_assert(ks);
//
内核加锁
ks
->
Lock();
//
获得Class列表
const
nHashList
*
classList
=
ks
->
GetClassList();
nHashNode
*
node
=
(nClass
*
)classList
->
Gethead();
//
遍历输出Class列表
do
{
nClass
*
cls
=
(nClass
*
)node;
ks_print(
"
%s
"
,cls
->
Getname());
node
=
node
->
GetSucc();
}
while
(nodE);
//
内核解锁
ks
->
Unlock();
}
///
///
-CommonSection
///
----------------------------------------------------------------------------
///
----------------------------------------------------------------------------
///
+ScriptSection
///
///
LogCLS的脚本支持
static
voID
n_logcls(
voID
*
slf,nCmd
*
cmd);
///
LogNOH的脚本支持
static
voID
n_lognoh(
voID
*
slf,nCmd
*
cmd);
voID
nNebulaScripTinitCmds(nkernelinfoHelper)(nClass
*
cl)
{
cl
->
BeginCmds();
cl
->
AddCmd(
"
v_logcls_v
"
,
'
LCLS
'
,n_logcls);
cl
->
AddCmd(
"
v_lognoh_s
"
,
'
LNOH
'
,n_lognoh);
cl
->
EndCmds();
}
static
voID
n_logcls(
voID
*
slf,nCmd
*
cmd)
{
nKernelinfoHelper
*
self
=
(nKernelinfoHelper
*
)slf;
self
->
LogCLS();
}
static
voID
n_lognoh(
voID
*
slf,nCmd
*
cmd)
{
nKernelinfoHelper
*
self
=
(nKernelinfoHelper
*
)slf;
const
char
*
root
=
cmd
->
In()
->
GetS();
self
->
LogNOH(root);
}
///
///
-ScriptSection
///
----------------------------------------------------------------------------
#pragma
warning(pop)
-The End-
大佬总结
以上是大佬教程为你收集整理的Nebula2探秘附件:nutildef与nkernelinfo的代码全部内容,希望文章能够帮你解决Nebula2探秘附件:nutildef与nkernelinfo的代码所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。