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

原文地址:https://www.cnblogs.com/gd-luojialin/p/10962878.html

时间: 2024-10-26 03:13:53

lua加载DLL的相关文章

lua加载函数require和dofile

Lua提供高级的require函数来加载运行库.粗略的说require和dofile完成同样的功能但有两点不同: 1. require会搜索目录加载文件 2. require会判断是否文件已经加载避免重复加载同一文件. 由于上述特征,require在Lua中是加载库的更好的函数. require使用的路径和普通我们看到的路径还有些区别,我们一般见到的路径都是一个目录列表.require的路径是一个模式列表,每一个模式指明一种由虚文件名(require的参数)转成实文件名的方法.更明确地说,每一个

java 加载dll介绍(转)

最近在做的工作要用到本地方法,需要在Java中加载不少动态链接库(以下为方便延用Windows平台下的简写dll,但并不局限于Windows).刚刚把程序跑通,赶紧把一些心得写出来,mark.也希望对大家的类似工作有所帮助 首先,应当明确,dll有两类:(1)Java所依赖的dll和,(2)dll所依赖的dll.正是由于第(2)种dll的存在,才导致了java中加载dll的复杂性大大增加,许多说法都是这样的,但我实验的结果却表明似乎没有那么复杂,后面会予以详细阐述. 其次,Java中加载dll的

无法加载 DLL“rasapi32.dll”: 动态链接库(DLL)初始化例程失败。的处理备注方案

网站提示   无法加载 DLL"rasapi32.dll": 动态链接库(DLL)初始化例程失败. (异常来自 HRESULT:0x8007045A). <system.net><defaultProxy><proxy usesystemdefault="false" /></defaultProxy></system.net> 初步怀疑是因为做了云加速服务造成的代理问题,自己瞎猜!反正应该管用

.Net常用技巧_动态加载Dll

原理如下: 1.利用反射进行动态加载和调用. Assembly ass=Assembly.LoadFrom(DllPath); //利用dll的路径加载,同时将此程序集所依赖的程序集加载进来,需后辍名.dll Assembly.LoadFile 只加载指定文件,并不会自动加载依赖程序集.Assmbly.Load无需后辍名 2.加载dll后,需要使用dll中某类. Type type=ass.GetType(“TypeName”);//用类型的命名空间和名称获得类型 3.需要实例化类型,才可以使用

简单的C#动态加载dll并转换类型

可以通过该方法来实现程序插件化. 假设A,B两个类,A类为宿主,B类为插件需要加载到A类中: class Program { public interface IHellow { void Hellow(); } static void Main(string[] args) { Assembly ass = Assembly.LoadFrom("D:/xx.dll"); var wormMain = ass.GetTypes().FirstOrDefault(m => m.Ge

asp.net调用非托管dll,无法加载 DLL,找不到指定模块解决方法。

最近开发一个项目,里面用到了非.net开发的一个dll文件接口,发现发布到window2003服务器上后,运行网站总是提示 "无法加载 DLL"D:\11\1.dll": 找不到指定的模块. (异常来自 HRESULT:0x8007007E). "这个错误.但是我在本地xp系统上调试是可以的. dll使用com调用如下 [DllImport(@"D:\11\1.dll", EntryPoint = "aaa", CharSet

加载dll、lib库

2.是关于如何加载dll或lib库的.可以看这篇bog   Qt调用dll中的功能函数点击打开链接 **************************************************************************************************************************************************** 声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll),C版接口的.并且用我前两篇有

C#加载dll 创建类对象

//加载dll 创建类对象string sqlightAssembly = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "system.data.sqlite.dll"); Assembly lib = Assembly.LoadFrom(sqlightAssembly); foreach (Type t in lib.GetExportedTypes()) { if(t.FullName == "System.Da

IIS无法加载 DLL解决办法

IIS提示 无法加载 DLL“OraOps12.dll”: 找不到指定的模块. (异常来自 HRESULT:0x8007007E). 说明: 执行当前 Web 请求期间,出现未经处理的异常.请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息. 异常详细信息: System.DllNotFoundException: 无法加载 DLL“OraOps12.dll”: 找不到指定的模块. (异常来自 HRESULT:0x8007007E). 解决办法: 1. 复制相关dll到bin