原文) a# K( Z4 @1 T
http://www.dreamloader.net/?action-viewthread-tid-22& G2 p/ w* u! `/ |5 ^- l
- H: C9 I+ k6 k9 E+ \% u
如果你想直接在lua中调用你制作的DLL 下列是一个最简洁的方法 即使用lua的require函数
/ B6 I$ ?2 p) i( a: p9 J
& A& [' h) j! x# h4 ?# z+ M# W1.在c++中创建一个DLL( Y6 q0 G# \( o/ {0 A+ K
CODE:
( n$ }8 a4 v( W, S2 v% J* h/ a
- o6 t1 z, Z' l5 |. Q, _6 }
8 W7 L2 A/ h! t; L/ }/ n7 ?0 C5 k//lua_net.cpp
! C+ x; E+ x6 C4 B0 T4 z: Z' F8 F9 Z, ~+ e
#include <windows.h> " R: u1 S' d3 n) g8 }# c/ {2 i, _
#include "..\lua\include\lua.hpp" " g0 W* V" t, Q) x, b* h" {4 T* \/ s
! I0 t# Y4 s' s4 [
//open
! _! a) y: z9 R' G0 v% G; istatic int net_Open(lua_State* L) # ^. P& X9 q7 g3 i
{
0 O' Z3 h z. V! A# C lua_pushstring(L,"net open"); / q! C; b$ W8 G. r- P3 ^& g. h
return 1; 0 y& z4 G7 M, H9 q- F
} % D8 G. f: `7 ^& x; h
0 U* L" c V2 J1 v//close 3 ]: j8 \" s( x) O4 V: Z, F
static int net_Close(lua_State* L) ; r, B9 W5 D0 b. H3 v1 j, b, m: M" c
{
1 r* K! D+ w( n8 l9 R: c lua_pushstring(L,"net close");
S' O) p4 j* o; s( w- f return 1; : d9 ^# h6 p! s. b$ ~# d
}
$ `1 n4 \" Y4 Z0 z
$ v& }" h- C: H2 c/ [$ J6 m' y$ d7 o T; x" @& N* J1 [
# F0 K7 f- e9 `$ L; q3 m
& Q$ T" m: R5 y% A1 U# I
extern "C"{
4 d0 S+ _" ~ [" n) w, |- X
, m7 M, _2 H" p/ @$ ]$ o! R- m__declspec(dllexport)
4 K" g! O6 ~" s$ t6 M3 k9 g" n4 d q: ~; t7 t' _3 c& g* H. X
int luaopen_lua_net(lua_State *L) ' |; a/ r b# p3 u' G/ k
{ 4 l! f/ z* ^4 M4 P$ a, _& N
luaL_register(L, "netClose", net_Close); : `, \% P7 x) c* s5 v1 x+ j
luaL_register(L, "netopen", net_Open); 8 K' z! M# R; a/ Y
return 1;
% _! u& `+ z; V! h% t} ( M. H5 Q4 b, \" e
) l* v; w; G$ _, C+ Z3 T7 ]
}
7 V. |+ n" f$ r2.把编译的dll 这里名为lua_net.dll 放到和main.exe同目录中或者自己另设目录 然后在lua中输入
' J, z0 C- x0 [2 y4 ^, NCODE:
7 q& q! S$ {' P @6 c0 `& o* @# F5 m
, p7 Z* i8 [! ]2 m% r% R" u: [* [require 'lua_net'
4 g) \" P/ _" G5 [print(net.open()) --显示netopen
; T9 r: H0 Q" j) e+ ?8 n: k" Vprint(net.close())--显示netclose; h: m: e3 B2 Y6 H- }/ {
编译的前提是你下载有lua5 的源代码 可以到这里下载 http://www.lua.org/download.html1 S7 M+ N8 } @' _3 z2 F
* J, |* G. i W
注:这是一种比较直接的方法 前提是需要你会使用c++ 适合高级用户使用 另外 我们也在尝试写一些通用函数 4 \5 f, {. K* J
让用户直接在lua中调用DLL 而不需要有c++知识 例如在lua中直接输入:, q) Y4 ~& m3 S; @
CODE:1 O& T7 I* J/ x9 Y# z o* I
|0 v% K; K! U2 u& g3 N
7 w. ?" e: N+ Y1 `--读取dll
' Y" P# J- V, o" hfunction1=loaddll("test.dll")
( T8 e2 u" E% @8 T" X( D4 c9 z
" o+ P3 L0 U( g" j--执行得到的函数4 ~* d' r/ P2 f# Y) l; p
function1(参数1,参数2....) |