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

lua加载DLL的更多相关文章

  1. 无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)

    SQLite部署-无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块 近期刚使用SQLite,主要引用的是System.Data.SQLite.dll这个dll,在部署到测试 ...

  2. 加载dll过程中assembly失败

    错误现象: 进行插件读取时出现错误:“尝试从一个网络位置加载程序集,在早期版本的 .NET Framework 中,这会导致对该程序集进行沙盒处理.此发行版的 .NET Framework 默认情况下 ...

  3. SQLite部署-无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块

    近期刚使用SQLite,主要引用的是System.Data.SQLite.dll这个dll,在部署到测试环境时报无法加载 DLL“SQLite.Interop.dll”: 找不到指定的模块. (异常来 ...

  4. C++动态加载DLL调用方法

    一.构建DLL路径 char szTmp[_MAX_PATH]; char* szPath = getcwd(szTmp, _MAX_PATH);//获取当前工作目录  //构建dll路径  strc ...

  5. c# 无法加载 DLL xxxxxxxx找不到指定的模块。 (异常来自HRESULT:0x8007007E)。的一个解决方法

    最近在做一个程序,想把某些功能用C++写成DLL供C#调用.但是无法如何都无法调用,提示"无法加载 DLL xxxxxxxx找不到指定的模块. (异常来自HRESULT:0x8007007E ...

  6. C#加载dll 创建类对象

    //加载dll 创建类对象string sqlightAssembly = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "syst ...

  7. 关于Windows平台下应用程序加载DLL模块的问题.

    本文将讨论以下问题: (1)Windows可执行程序会从哪些目录下加载DLL. (2)如何将可执行使用的DLL放置到统一的目录下,而不是与EXE同一目录. (3)可执行程序加载了不该加载的DLL. ( ...

  8. 动态链接库知识点总结之三(如何以显示的方式加载DLL)

    总结一下如何显示加载方式加载DLL, 首先,我们新建一个win32项目,选择dll,空项目,再添加一个源文件,一个模块定义文件(.def),具体如下图.(详细方法已经在前两篇文章中讲述,如有不懂,打开 ...

  9. 无法加载 DLL“ArcGISVersion.dll”: 找不到指定的模块

    无法加载 DLL“ArcGISVersion.dll”: 找不到指定的模块.(异常来自 HRESULT:0x8007007E).

随机推荐

  1. nginx 错误集锦

    1)下载地址 http://nginx.org/en/download.html 找windows的下载. 2)然后解压到自己的一个目录. 3)配置环境变量,将解压到的路径加进去. 4)修改配置文件 ...

  2. Ajax/Highcharts—动态图表

    前面写过“Highcharts的用法总结”,当然了,在实际应用中,图表数据都是要从后台获取的,根据之前的使用,贴一些例子来分享学习. 首先,如果没有获取后台数据,又希望呈现一个动态图表的话,可以很轻易 ...

  3. Mac下安装brew

    1.Mac 终端下,执行以下命令,即可安装brew: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Hom ...

  4. leetcode94 不同的二叉搜索树

    solution 1:**动态规划 class Solution { public: int numTrees(int n) { vector<int> g={1,1,2}; for(in ...

  5. Redis4.0.11在linux上面安装时候编译的输出

    root@iZ2zedo02x7n4nuc3lb4ueZ:/opt/redis-4.0.11/src# make install CC Makefile.deprm -rf redis-server ...

  6. ElasticSearch——Logstash输出到Elasticsearch配置

    位置 在Logstash的.conf配置文件中的output中配置ElasticSearch 示例: output { elasticsearch{ action => "index& ...

  7. Spring MVC的多视图解析器配置及与Freemarker的集成

    一.从freemarker谈起 Freemarker使用模板技术进行视图的渲染.自从看了Struts标签.Freemarker.JSTL的性能对比后,我毅然决定放弃Struts标签了!效率太差…… S ...

  8. weblogic密码重置----未做成

    1.备份DefaultAuthenticatorInit.ldift文件 [root@test4 ~]# find / -name DefaultAuthenticatorInit.ldift /ap ...

  9. 【转载】oracle中decode函数用法

    1.DECODE的语法:DECODE(value,if1,then1,if2,then2,if3,then3,...,else).表示假设value 等于if1时,DECODE函数的结果返回then1 ...

  10. jvm小白

    tomcat设置可被jconsole监控: 在catalina.bat或catalina.sh里面加上. set JAVA_OPTS=-Djava.rmi.server.hostname=127.0. ...