zoukankan      html  css  js  c++  java
  • Lua语言如何调用自己编写的C DLL 转

    Lua语言如何调用自己编写的C DLL文件
    
    #include "lua.h"
    #include "lualib.h"
    #include "lauxlib.h"
    #include <windows.h>
    
    static int MyLuaDLL_HelloWorld(lua_State* L)
    {
         MessageBox(NULL,"Hello","World",MB_OK);
         return 0;
    }
    static int MyLuaDLL_average(lua_State *L)
    {
        
         int n = lua_gettop(L);
         double sum = 0;
         int i;
        
         for (i = 1; i <= n; i++)
         {
            
             sum += lua_tonumber(L, i);
         }
        
         lua_pushnumber(L, sum / n);
        
         lua_pushnumber(L, sum);
        
         return 2;
    }
    
    static const luaL_reg MyLuaDLLFunctions [] =
    {
         {"HelloWorld",MyLuaDLL_HelloWorld},
         {"average",MyLuaDLL_average},
         {NULL, NULL}
    };
    
    int __cdecl __declspec(dllexport) luaopen_MyLuaDLL(lua_State* L)
    {
         luaL_openlib(L, "MyLuaDLL", MyLuaDLLFunctions, 0);
         return 1;
    }
     
    -- lua code: --
    
    local testlib = package.loadlib("Lua_Dll.dll","luaopen_MyLuaDLL");   --获取DLL中抛出函数地址
    print (testlib) 
    if(testlib)then
        testlib();  --调用DLL中抛出函数
    else
        -- Error
    end
    
    MyLuaDLL.HelloWorld();
    
    a,b=MyLuaDLL.average(23,33,3344);
    print("average:",a,"sum:",b);
    --------------------------------------------
    my.c文件:
    
    #include "stdafx.h"
    #include <stdio.h>
    #include "my.h"
    
    static int pri(lua_State *L)
    { 
     MessageBox(NULL,"Hello","this is a c program!",MB_OK);
     return 0;
    }
    
    static const struct luaL_Reg mylib[]={
     {"pri",pri},
     {NULL,NULL}
    };
    
    __declspec(dllexport) int luaopen_mylib (lua_State* L)
    {
     luaL_register(L,"mylib",mylib);
     return 1;
    }
    
    my.h文件:
    
    #include "lua.h" 
    #include "lualib.h"
    #include "lauxlib.h"
    #pragma   comment(lib,"lua5.1.lib")
    
    test.lua文件:
    
    local a=package.loadlib("my.dll","luaopen_mylib");
    
    a()
    mylib.pri()
    

      

  • 相关阅读:
    input type = file 上传图片转为base64
    vue-cli 搭建的项目,无法用本地IP访问
    js小数点精度问题
    虚拟机安装软件必备技术之一 --虚拟机快照技术
    Linux 关机命令总结
    查询模块错误排查
    - Oracle 闪回特性(FLASHBACK DATABASE)
    ORACLE密码过期,修改密码
    查看sql执行进度
    ORACLE CPU过高的sql查询
  • 原文地址:https://www.cnblogs.com/chuncn/p/2352624.html
Copyright © 2011-2022 走看看