luacppwrapper.cpp

来自「lua语言windows开发环境」· C++ 代码 · 共 128 行

CPP
128
字号
// LuaCppWrapper.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "LuaPlusHelper.h"

void LOG(const char* message)
{
	printf("In global function: %s\n", message);
}

class Logger
{
public:
	void LOGMEMBER(const char* message)
	{
		printf("In member function: %s\n", message);
	}

	virtual void LOGVIRTUAL(const char* message)
	{
		printf("In virtual member function: %s\n", message);
	}

	Logger()
	{
		printf("Constructing(%p)...\n", this);
		v = 10;
	}
	virtual ~Logger()
	{
		printf("Destructing(%p)...\n", this);
	}

	Logger(int n)
	{
		printf(" -- Constructing[%d](%p)...\n", n, this);
	}
	Logger(Logger* logger)
	{
		printf(" -- Constructing[%p](%p)...\n", logger, this);
		logger->LOGMEMBER("-- 0000---0000\n");
	}
public:
	int v;
};

void LOG2(const char* message, LuaObject xlogger)
{
	Logger* logger = (Logger*)xlogger.GetUserData();
	printf("In global function: %s\n", message);
	printf("---%d\n", logger->v);
	logger->LOGMEMBER(message);
}





int _tmain(int argc, _TCHAR* argv[])
{
	{
		LuaStateOwner state; 

		Logger logger;

		LuaModule(state)
			.def("LOG", LOG)
			.def("LOGMEMBER", logger, &Logger::LOGMEMBER)
			.def("LOGVIRTUAL", logger, &Logger::LOGVIRTUAL)
			.def("LOG2", LOG2);

		LuaClass<Logger>(state)
			.create("Logger")
			.create<int>("Logger2")
			.create<Logger*>("Logger3")
			.destroy("Free")
			.destroy("__gc")
			.def("lm", &Logger::LOGMEMBER)
			.def("lv", &Logger::LOGVIRTUAL);


		state->GetGlobals().SetNumber("a", 123456);
		int a = state->GetGlobal("a").GetInteger();
		printf(" a = %d\n", a);

		state->DoString("LOG('Hello')");
		state->DoString("LOGMEMBER('Hello')");
		state->DoString("LOGVIRTUAL('Hello')");

		state->DoString(
			"print('=========');"
			"print(Logger, _G['MetaClass_.?AVLogger@@']);"
			"l = Logger();"
			);
		state->DoString(
			"print(l);"
			"print(l.lv);"
			"print(l.lm);"
			);

		state->DoString("print('=========');");
		state->DoString("l:lm('Hhhhh');");
		//state->DoString("l:lv('Eeeee');"); //--虚函数不能用!!!
		state->DoString("--l:Free();l=nil;");

		state->DoString("print('=========');");
		state->DoString("LOG2('SSSS', l)");

		state->DoString("print('=========');");
		state->DoString("k = Logger2(10);k:lm('World2');k:Free();");

		state->DoString("print('=========', l);");
		state->DoString("h = Logger3(l);h:lm('World!!!!!!!!!');");

		LuaFunction<int> l = state->GetGlobal("LOG");
		l("DDDDDD");



	}

	system("Pause");
	return 0;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?