Luaplus Windows use (2)

Preface
The last chapter has already described how to compile luaplus5.3 on windows, this chapter mainly describes how to use
1: Prepare
vs2015

2:code
1>luaplusmanager.h

#ifndef LUAPLUS_MACHINE_H
#define LUAPLUS_MACHINE_H
#include "LuaPlus.h"
using namespace LuaPlus;
#include <string>
using namespace std;

class CMultiObject1
{<!-- -->
public:
CMultiObject1(int num) :m_num(num)
{<!-- --> }

int Print1(LuaState* state)//LuaState* state, int x
{<!-- -->
printf("[Print]%d \
", m_num);
// printf("%d %d \
", m_num,x);
return 0;
}
int GetNum(LuaState* state)
{<!-- -->
printf("[GetNum]%d \
", m_num);
return m_num;
}
void Print2(int num)
{<!-- -->
printf("[Print2]%d %d\
", m_num, num);
}
int Sum1(int x, int y)
{<!-- -->
printf("[Sum1]%d %d\
", x, y);
return x + y;
}
protected:
int m_num;
};

class CLuaplusMachine
{<!-- -->
public:
CLuaplusMachine();
virtual ~CLuaplusMachine();
public:
void TestLuaFunction();
void TestLuaObj(CMultiObject1* pObj);
private:
LuaStateOwner m_luaState;
string m_strLastError;

LuaObject m_metaTableFun;
LuaObject m_metaTableObj;
};

#endif

2>luaplusmanager.cpp

#include "luaplusMachine.h"

CLuaplusMachine::CLuaplusMachine()
{<!-- -->

}
CLuaplusMachine::~CLuaplusMachine()
{<!-- -->

}
void CLuaplusMachine::TestLuaFunction()
{<!-- -->
//LuaStateOwner state;
//state->OpenLibs(); //create metaTable
m_luaState->OpenLibs();
//LuaObject metaTableObj = m_luaState->GetGlobals().CreateTable("MultiObjectMetaTable1");
m_metaTableFun = m_luaState->GetGlobals().CreateTable("testtesttest");
m_metaTableFun.SetObject("__index", m_metaTableFun); //register functor for multiobject
//metaTableObj.RegisterObjectFunctor("Print", & amp;CMultiObject::Print); //get a instances of CMultiObject
m_metaTableFun.RegisterObjectFunctor("Print1", &CMultiObject1::Print1);
m_metaTableFun.RegisterObjectFunctor("GetNum", &CMultiObject1::GetNum);

m_metaTableFun.RegisterObjectDirect("Print2", (CMultiObject1*)0, &CMultiObject1::Print2);

m_metaTableFun.RegisterObjectDirect("Sum1", (CMultiObject1*)0, &CMultiObject1::Sum1);

m_luaState->GetGlobals().SetInteger("gParam1", 100);
m_luaState->GetGlobals().SetInteger("gParam2", 200);

// LuaObject table1Obj = m_luaState->GetGlobals().CreateTable("obj11");
m_metaTableObj = m_luaState->GetGlobals().CreateTable("obj13");
}

void CLuaplusMachine::TestLuaObj(CMultiObject1* pObj)
{<!-- -->
\t
m_metaTableObj.SetLightUserdata("__object", pObj);
m_metaTableObj. SetMetatable(m_metaTableFun);
m_luaState->DoFile("1.lua");
}

3>main.cpp

#include <iostream>
using namespace std;
//#include "luaplusmanager.h"

#include "LuaPlus.h"
using namespace LuaPlus;
#include <string>
using namespace std;

#include <stdio.h>
#include <stdlib.h>

int Add(int x, int y)
{<!-- -->
printf("sum=%d \
", x + y);
return x + y;
}

class CTest
{<!-- -->
public:
CTest(){<!-- -->}
~CTest() {<!-- -->}
public:
int Sub(int x, int y)
{<!-- -->
printf("sub=%d \
", x - y);
return x - y;
}
};

class CMultiObject
{<!-- -->
public:
CMultiObject(int num) :m_num(num)
{<!-- --> }

int Print1(LuaState* state)//LuaState* state, int x
{<!-- -->
printf("[Print]%d \
", m_num);
// printf("%d %d \
", m_num,x);
return 0;
}
int GetNum(LuaState* state)
{<!-- -->
printf("[GetNum]%d \
", m_num);
return m_num;
}
void Print2(int num)
{<!-- -->
printf("[Print2]%d %d\
", m_num, num);
}
int Sum1(int x, int y)
{<!-- -->
printf("[Sum1]%d %d\
", x, y);
return x + y;
}
protected:
int m_num;

};
template<typename Callee, typename Func>
void RegisterObjectLink(LuaObject* pLuaObject, const char* szfunName, Callee* callee, Func func)//
{<!-- -->
pLuaObject->RegisterObjectDirect(szfunName,(Callee*)0, func);
}


//1.lua
//obj1:Print()
//obj2:Print()
//obj1:Print2(123)
//obj1:Sum1(1, 2)
//obj1 : Sum1(gParam1, gParam2)

int main()
{<!-- -->
{<!-- -->
// CMyGlobal* pGlobal = new CMyGlobal;
// CLuaPlusManager* pLuaManager = new CLuaPlusManager;
// pLuaManager->RegisterGlobalFun(pGlobal);
// pLuaManager->RunScriptFile("2.lua");

}
/*
system("pause");
CMyGlobal* pGlobal = new CMyGlobal;
CLuaPlusManager* pLuaManager = new CLuaPlusManager;
pLuaManager->RegisterGlobalFun(pGlobal); //register global function class
long long n64Param1 = (1ll << 32) + 1;
long long n64Param2 = (2ll << 32) + 1;
pLuaManager->InitTwoParam(n64Param1, n64Param2);
pLuaManager->RunScriptFile("2.lua");
\t
CTest* pTest = new CTest;
LuaStateOwner state;
state->OpenLibs();
state->GetGlobals().SetInteger("gParam1", 10);
state->GetGlobals().SetInteger("gParam2", 20);
state->GetGlobals().RegisterDirect("add", Add);

//state->GetGlobals().RegisterDirect("sub", *pTest, &CTest::Sub);
//LuaObject luaObject1 = state->GetGlobals().CreateTable("CTest");
//luaObject1. SetMetatable(luaObject1);
//luaObject1. SetObject("__index", luaObject1);

//luaObject1.RegisterObjectDirect("Sub", &CTest::Sub)
//luaObject1.RegisterObjectDirect("Sub", pTest, &CTest::Sub);
// state->GetGlobals().RegisterDirect("add", test, &Test::add);
//metaTableObj.RegisterObjectDirect("Print2", (CMultiObject*)0, & amp;CMultiObject::Print2);
state->DoFile("1.lua");
*/

\t
LuaStateOwner state;
state->OpenLibs(); //create metaTable
LuaObject metaTableObj = state->GetGlobals().CreateTable("MultiObjectMetaTable");
metaTableObj.SetObject("__index", metaTableObj); //register functor for multiobject
//metaTableObj.RegisterObjectFunctor("Print", & amp;CMultiObject::Print); //get a instances of CMultiObject
metaTableObj.RegisterObjectFunctor("Print1", &CMultiObject::Print1);
metaTableObj.RegisterObjectFunctor("GetNum", &CMultiObject::GetNum);

metaTableObj.RegisterObjectDirect("Print2", (CMultiObject*)0, &CMultiObject::Print2);

metaTableObj.RegisterObjectDirect("Sum1", (CMultiObject*)0, &CMultiObject::Sum1);

state->GetGlobals().SetInteger("gParam1", 100);
state->GetGlobals().SetInteger("gParam2", 200);

// metaTableObj.RegisterObjectDirect("Print2", (CMultiObject*)0, & amp;CMultiObject::Print1);
// metaTableObj.RegisterObjectDirect("GetNum", (CMultiObject*)0, & amp;CMultiObject::GetNum);
{<!-- -->
// CMultiObject obj1(10); //"clone" a object in lua, the lua object(here is table) has obj1's data
// LuaObject obj1Obj = state->BoxPointer( & amp;obj1);
// obj1Obj.SetMetatable(metaTableObj); //put lua object to Global scope, thus it can be accessed later.
// state->GetGlobals().SetObject("obj1", obj1Obj);
// CMultiObject obj2(20);
// LuaObject obj2Obj = state->BoxPointer( & amp;obj2);
// obj2Obj. SetMetatable(metaTableObj);
// state->GetGlobals().SetObject("obj2", obj2Obj); //now call Print and Print2
//
// state->DoFile("1.lua");
}
{<!-- -->

LuaObject table1Obj = state->GetGlobals().CreateTable("obj1");
for (int i = 1; i < 2; i ++ )
{<!-- -->
CMultiObject obj1(i);
table1Obj.SetLightUserdata("__object", &obj1);
table1Obj. SetMetatable(metaTableObj);
state->DoFile("1.lua");

\t\t\t
//state->DoString("obj1:Print2(5)");
}
\t\t
\t\t
\t\t

// CMultiObject obj2(20);
// LuaObject table2Obj = state->GetGlobals().CreateTable("obj2");
// table2Obj.SetLightUserdata("__object", &obj2);
// table2Obj. SetMetatable(metaTableObj);

// state->DoString("table1:Print()");
// state->DoString("table2:Print()");

// CMultiObject obj1(10);
// LuaObject table1Obj = state->GetGlobals().CreateTable("obj1");
// table1Obj.SetLightUserdata("__object", & amp;obj1);
// table1Obj. SetMetatable(table1Obj);
// CMultiObject obj2(20);
// LuaObject table2Obj = state->GetGlobals().CreateTable("obj2");
// table2Obj.SetLightUserdata("__object", &obj2);
// table2Obj. SetMetatable(table2Obj);
}
\t 
// state->DoFile("1.lua");
// state->DoString("obj1:Print();");
// state->DoString("obj2:Print();");
system("pause");
return 0;
}

///

void TestRegObjectDispatchFunctor()
{<!-- -->
//LuaStateOwner state;
// LuaObject table1Obj = state->GetGlobals().CreateTable("table1");
// table1Obj.SetLightUserdata("__object", & amp;obj1);
// table1Obj. SetMetatable(table1Obj);
// LuaObject table2Obj = state->GetGlobals().CreateTable("table2");
// table2Obj.SetLightUserdata("__object", &obj2);
// table2Obj. SetMetatable(table2Obj);
// state->DoString("table1:Print()");
// state->DoString("table2:Print()");
}

4:1.lua

--[[
obj1:Print1()
obj1: GetNum()
obj1:Print2(123)
obj1:Sum1(1,2)
--obj1:Sum1(gParam1,gParam2)

-----------------------------------------two object------
obj2:Print1()
obj2:GetNum()
--]]
--obj1:Print()
--obj2:Print()
obj13:Print2(123)
obj13:Sum1(1, 2)
obj13:Sum1(gParam1, gParam2)

3: Running results

If you find it useful, please like it and add a favorite