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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM