• lua加载DLL


    .cpp

    //若没有在项目属性--库文件、依赖文件、包含添加。则添加一下路径

    #pragma  comment (lib,"lua5.1.lib")

    #include "stdafx.h"

    #include "lua.hpp"

    extern "C" {

    #include "lua.h" 

    #include "lualib.h" 

    #include "lauxlib.h" 

    }

    static int MyLuaDLL_HelloWorld(lua_State* L)

    {

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

          //2代表返回2个参数

          return 2;

    }

    //当lua使用MyLuaDLL.HelloWorld时,响应函数MyLuaDLL_HelloWorld

    static const luaL_reg MyLuaDLLFunctions [] =

    {

          {"HelloWorld",MyLuaDLL_HelloWorld},

          {"average",MyLuaDLL_average},

          {NULL,NULL}

    };

    /*此处导出函数luaopen_MyLuaDLL。其中MyLuaDLL要与.exe程序名一致

      若lua用dofile调用dll必须一致,若lua用loadlib加载dll可不一致

      luaL_register(L, "MyLuaDLL", MyLuaDLLFunctions); 中的MyLuaDLL,用于给lua调用DLL中的函数,类似外放对象。

    */

    extern "C"  __declspec(dllexport) int luaopen_MyLuaDLL(lua_State* L)

    {

          luaL_register(L, "MyLuaDLL", MyLuaDLLFunctions);

          return 1;

    }

    BOOL APIENTRY DllMain( HMODULE hModule,

                           DWORD  ul_reason_for_call,

                           LPVOID lpReserved

                                 )

    {

          switch (ul_reason_for_call)

          {

          case DLL_PROCESS_ATTACH:

               //printf("Process attach. ");

               break;

          case DLL_PROCESS_DETACH:

               //printf("Process detach. ");

               break;

          case DLL_THREAD_ATTACH:

               //printf("Thread attach. ");

               break;

          case DLL_THREAD_DETACH:

               //printf("Thread detach. ");

               break;

          }

          return (TRUE);

    }

    .lua

    --Lua_Dll.dll必须放在luajit同一目录下

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

  • 相关阅读:
    数30的小程序
    convert curl command into java HttpGet
    优秀技术文章转载备份 --- 变速原理
    用 c 调用 win-api 实现自动点击c# winform 程序 的按钮
    win 10 安装 glew 方法
    《想到什么更新什么系列》processing 性能优化
    processing 根据物体移动方向改变朝向
    openFrameworks 无法生成exe已经找不到dll的解决方案
    UE4 无法打开源文件“file_name.generated.h”(Cannot open source file name.generated.h)
    UE4 重新编译老版本的插件
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/10962878.html
Copyright © 2020-2023  润新知