最简单的c++lua中间层 ---- XScript

最简单的c++lua中间层 ---- XScript,第1张

最简单的c++/lua中间层 ---- XScript Xscript介绍

​ lua是一种轻量小巧的脚本语言,免费开源,简单易学,c/c++这类低级语言胜在能够直接与 *** 作系统打交道,从而能够最大限度的利用系统资源,但是写逻辑不太方便,“C++/lua”是游戏界比较常用的一种开发语言解决方案,用c++做服务器底层,再嵌入lua编写业务逻辑是比较常用的一种解决方案,用c++做服务器底层,再嵌入lua编写业务逻辑,这种组合能够比较好的平衡性能与开发效率。

​ Xscript是一个跨平台c++/lua交互库,内置lua面向框架,支持远程调试,能够编译成静态库或者动态库,能够快速集成到新项目中。
git地址 https://gitee.com/SH-Jun_admin/Xscript.git

注册cpp全局函数
#include 
#include 
#include 
#include 
#ifndef _WIN32
#include 
#else
#include 
#endif
using namespace XS;
void GlobalFun(const char* szContent)
{
	printf("GlobalFun %sn", szContent);
}
REGIST_GLOBALFUNCTION(GlobalFun)


const  char* szLuaPath = "E:/open-src/Xscript/samplers/BlogTest/lua/test.lua";
int main(int argc, char** args)
{
	Cscriptbase* pscript = new CscriptLua(nullptr, 123456);
	char szWorkDir[2048];
	getcwd(szWorkDir, ELEM_COUNT(szWorkDir));
	pscript->AddSearchPath(szWorkDir);
	pscript->RunFile(szLuaPath);
	char ch = getchar();
	delete pscript;
	return 0;
}
print("this is a test file");
GlobalFun("this is a GlobalFun")
注册并继承c++ class
#include 
#include 
#include 
#include 
#include 
#ifndef _WIN32
#include 
#else
#include 
#endif
using namespace std;
using namespace XS;

class CActor
{
public:
	CActor(const char* szName, const char *szIcon)
	{
		m_szName = szName;
		m_szHeadIcon = szIcon;
	}
	~CActor(){};

	string GetName(){
		return m_szName;
	}
	virtual int GetClassID(){ return 0; }

private:
	string m_szName;
	string m_szHeadIcon;
	
};

void GlobalFun(CActor* pActor)
{
	printf("void GlobalFun(CActor* pActor)n");
	printf("GlobalFun %d %sn", pActor->GetClassID(), pActor->GetName().c_str());
}
REGIST_GLOBALFUNCTION(GlobalFun)

DEFINE_CLASS_BEGIN(CActor)
	REGIST_ConSTRUCTOR(const char*, const char*)
	REGIST_DESTRUCTOR()
	REGIST_CLASSFUNCTION(GetName)
	REGIST_CALLBACKFUNCTION(GetClassID)
DEFINE_CLASS_END();

const  char* szLuaPath = "E:/open-src/Xscript/samplers/BlogTest/lua/test.lua";
int main(int argc, char** args)
{
	Cscriptbase* pscript = new CscriptLua(nullptr, 123456);
	char szWorkDir[2048];
	getcwd(szWorkDir, ELEM_COUNT(szWorkDir));
	pscript->AddSearchPath(szWorkDir);
	pscript->RunFile(szLuaPath);
	char ch = getchar();
	delete pscript;
	return 0;
}
print("this is a test file");
LuaActor = LuaActor or class(CActor)
function LuaActor:GetClassID()
	print("this is LuaActor:GetClassID")
	return 35
end
local actor = LuaActor:new("bob", "xxx.png")
GlobalFun(actor)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5702881.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存