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()
    

      

  • 相关阅读:
    jmeter 参数化测试
    jmeter属性与变量
    jmeter作用域规则
    jmeter执行顺序
    jmeter元素
    Array Transformer UVA
    A Simple Problem with Integers POJ
    分块 && 例题 I Hate It HDU
    c文件二进制读取写入文件、c语言实现二进制(01)转化成txt格式文本、c读取文件名可变
    sort排序使用以及lower_bound( )和upper_bound( )
  • 原文地址:https://www.cnblogs.com/chuncn/p/2352624.html
Copyright © 2011-2022 走看看