原文3 }$ ~+ H: l2 K
http://www.dreamloader.net/?action-viewthread-tid-223 m; y: u6 {3 `9 }+ u& [
0 C2 J- G" ]0 W3 K( M
如果你想直接在lua中调用你制作的DLL 下列是一个最简洁的方法 即使用lua的require函数0 \' _- u" }6 B* K$ ]2 ]
+ N) v7 V$ Z/ l( U( d
1.在c++中创建一个DLL
: R( T* F- {& j u2 rCODE:1 Z# A3 Z- E* I) }
8 K7 N y9 U' @* V
: I; C- D3 Y$ u' b( z' |//lua_net.cpp # l l& d4 F) ~5 L! ^) k0 a1 Q
8 r2 ?$ ?" X& u6 b- Y, F#include <windows.h>
8 b' |3 k; }+ M7 [5 c8 s& F4 [( l+ ~#include "..\lua\include\lua.hpp" ; V$ ]% c- G. u- z. \0 `
4 W, [! ^+ c8 J' B' C; B0 K$ H0 `
//open
. o( ]% K9 D% ~static int net_Open(lua_State* L)
! L% y* o- h) A9 O, t{
! o4 O- U$ p) I, Q6 I3 |% b lua_pushstring(L,"net open"); # C/ u$ A9 r K% D/ [- z' G, A
return 1;
$ o( H. z0 ?% |7 o} ' `6 A# A: z6 X% b: f0 B8 ]0 D; G$ }
( `3 F" e% g6 f4 {- R _ b
//close
2 S8 p" q6 C. f, i1 I7 Estatic int net_Close(lua_State* L)
* p7 e: u( p% S{ - N, d0 J' R, \3 q# h% V
lua_pushstring(L,"net close"); ' n+ z& k, f: h% u6 l
return 1;
) P, V) W! e0 z4 |9 ^! h! \} E3 `9 r+ y. ^! A* e7 @
- p) U0 k' C1 m; w6 P) Z" n3 Z' v& [2 n! w! O% w9 b/ K
7 q- \7 p1 A: m! T
. U0 t4 L; [; }; p, C. E1 ~extern "C"{ " a: h1 C- s; N9 [8 N) f
' o) h5 L' T, V5 B' ~__declspec(dllexport)
, D- y' l7 A- C9 [9 U& A0 C) y B- P0 @7 N$ B6 q9 P4 p
int luaopen_lua_net(lua_State *L)
6 ?3 D2 R1 D7 g1 j' Z{
! ~+ S+ T- U) Y3 T luaL_register(L, "netClose", net_Close);
4 S4 d# E3 w8 r: w luaL_register(L, "netopen", net_Open); 6 s0 z W! G. d, |! v$ m/ f
return 1;
- E& T8 ?6 i# z} % B7 z S3 J! {. P1 N
/ E' o( E$ ]# s) C6 s$ l+ |4 W} P7 ]( I0 k4 s9 n
2.把编译的dll 这里名为lua_net.dll 放到和main.exe同目录中或者自己另设目录 然后在lua中输入# C( b2 m& k0 `9 C* y
CODE:
4 |) [' P) o$ O+ J% @
% h2 [: h. @( G5 x& d2 s2 M9 R+ {+ h
" |/ L* t) S# h: nrequire 'lua_net' , d4 d9 m, M) a" P3 j
print(net.open()) --显示netopen
* J( r$ w* g' C5 \print(net.close())--显示netclose8 c. x% [! J& [3 Z3 G3 y" k
编译的前提是你下载有lua5 的源代码 可以到这里下载 http://www.lua.org/download.html6 j. X6 `* K6 w4 } G; {! C4 I
, z- v$ Q6 d$ I7 S, P8 ?4 t: {注:这是一种比较直接的方法 前提是需要你会使用c++ 适合高级用户使用 另外 我们也在尝试写一些通用函数 ! K7 c6 L& `- a
让用户直接在lua中调用DLL 而不需要有c++知识 例如在lua中直接输入:( r1 g' R$ T) S: \1 C
CODE:
/ G& k/ L4 {/ S8 O( z i
, z0 n+ S- H' E* z" w0 F' l j8 T. E6 J0 Z0 f5 \3 N. k- i
--读取dll
+ G& D$ f3 F/ g) g( ufunction1=loaddll("test.dll")
) Y7 d& H3 L5 Z
i' u; o4 q+ Y--执行得到的函数
! @# @+ T4 q+ ~% u/ T. ^) |function1(参数1,参数2....) |