• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

lua加载DLL

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

.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. \n");

           break;

      case DLL_PROCESS_DETACH:

           //printf("Process detach. \n");

           break;

      case DLL_THREAD_ATTACH:

           //printf("Thread attach. \n");

           break;

      case DLL_THREAD_DETACH:

           //printf("Thread detach. \n");

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

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
window下怎么运行lua源文件发布时间:2022-07-22
下一篇:
Cocos2dx-Lua与C++混合使用发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap