关于Lua调用c++ DLL 文件的详解
?Lua调用c++ dll文件的详解 尽管网上类似的例子不少,但是对于很多新手来说,有些问题并没有说的那么详细 直奔主题 在此,我会列出我参考的文章,有些东西就直接复制的 环境:Visual C++ 2008 Express Edition + Lua 1.5 + SciTE(lua编辑器)? Test Lua调用C++函数1.选择Source Files,右键Add->New Item->选择 C++ File(.cpp)->Add->Name栏输入hello->Add。2.在hello.cpp文件中输入下面Code.//----------依赖文件-----------//因为建的是C++ Project,所以这里必须要加extern "C" ,如果不加这个是没办法编译的。extern "C" {#include "lua.h"#include "lualib.h"#include "lauxlib.h"}#include <windows.h>#include <wincrypt.h>extern "C" int hello(lua_State* L){printf("------>>? Hi! %s n",(LPTSTR)lua_tostring(L,1));return 0; 看这三个函数 extern "C" int hello(lua_State* L) ? 这个函数是你往DLL里面注入的函数,其中它的参数是lua_State,这个是在LUA中的栈,它可以接受很多参数,按编号一次提取 比如说lua_tostring(L,1),就是从L中提取第一个元素,相比这个应该不难理解 ? 这个结构体很有意思,它说明了你在lua中调用函数的明天,“hello”是你在c++中的明天,hello是在lua中的名字 ? 最后一个函数,注册函数在lua中的定义,很简单,你看看就懂,就是把在hello这个dll中的函数给注册了 当然 还有最后一个步骤 3.建一个模块定义文件,在环境配置中说到过,这里先不介绍怎么配置。 ? A.这个时候要在当前Project下面建立文件,文件后缀为.def的文件。我这里定义的是叫“lua_c.def”的文件。 B.这个文件很简单,首先在文件最上面加上 EXPORTS,然后再将你在C++文件中定义的那个入口函数的函数名加进来就可以了。(就是上面的luaopen_hello)。 这个有必要说明一点, lua_c.def文件中的应该是 EXPORTS?luaopen_hello 关于luaopen_hello ? ?后面的hello 其实不是一个单独的意思,如果你建立的dll工程不叫hello,那么,就把hello改成那个名字,你可以试试不改会怎么样,容易 让你理解函数的意思,到此为止,基本的构架就完成了,可以去lua中测试一下吧 require("hello");-- 在C++文件中注册的名字local f = hello;-- 调用C++文件中定义的方法,"Lua"就是参数了。f.hello("Lua"); lua中的代码,这个就不解释了,应该是没问题的 ? 貌似不能添加附件,有问题可以问我邮箱:plyj0123@163.com 引用地址:http://apps.hi.baidu.com/share/detail/30715104 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |