• 用VC加载Lua.lib,C++调用lua脚本函数


    1、先去lua.org官方网站上去下载一个win32的vc10库(vs2010),如果你是其他版本请按照实际需求下载。

    2、创建一个新的 空控制台应用程序

    3、复制lualib下的include所有.h文件到项目中,并且全部加入到header files和source files中。

    4、新建一个main.cpp文件到source files中:加入C++代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    extern "C" {
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
    }
    #pragma comment (lib,"lua52.lib")
    
    void MaxMin(lua_State* L, int x, int y)
    {
        lua_getglobal(L, "MaxMin");
        //参数1
        lua_pushnumber(L, x);
        //参数2
        lua_pushnumber(L, y);
    
        //2个参数,3个返回值
        lua_pcall(L, 2, 3, 0);
        const char* c = lua_tostring(L, -3);
        lua_Number n1 = lua_tonumber(L, -2);
        lua_Number n2 = lua_tonumber(L, -1);
    
        //cout<<c<<"  "<<"Max = "<<n1<<", Min = "<<n2<<endl;
        printf("%s Max = %f Min = %f\n", c, n1, n2);  
        //元素出栈
        lua_pop(L, 3);
    }
    
    void printHello(lua_State* L)
    {
        lua_getglobal(L, "printHello");
    
        lua_pcall(L, 0, 1, 0);
        const char* c = lua_tostring(L, -1);
    
        printf("%s",c);  
        //元素出栈
        lua_pop(L, 1);
    }
    
    int main()
    {
        lua_State* L = luaL_newstate();
        if(!luaL_loadfile(L, "C:\\vsproject\\lua\\test\\testlua.lua"))
        {
            if(!lua_pcall(L, 0, 0, 0))
            {
                MaxMin(L, 1, 2);
                MaxMin(L, 3, 3);
                MaxMin(L, 9, 8);
                printHello(L);
            }
        }
        lua_close(L);
        system("pause");
        return 0;
    }

    5、然后再C:\\vsproject\\lua\\test\\ 目录下新建一个文件testlua.lua(也可以放在你想要放的地方),加入lua代码:

    function MaxMin(x, y)
        if x > y then
            return "x > y", x, y
        elseif x == y then
            return "x = y", x, y
        else
            return "y > x", y, x
        end
    end
    function printHello()
        return "Hello, world!"
    end

    然后运行结果:

  • 相关阅读:
    数据安全:1.98亿购车者的购车记录公之于众
    【作者面对面问答】包邮送《Redis 5设计与源码分析》5本
    关于区块链学习资料
    《机器学习》周志华西瓜书学习笔记(九):聚类
    Bulletproof零知识证明
    数据接收合并
    数据接收合并
    数据接收合并
    数据接收合并
    Tomcat 8 Host-Manager配置访问的方法,全网唯一正确配置
  • 原文地址:https://www.cnblogs.com/hyb1/p/3081615.html
Copyright © 2020-2023  润新知