原文
2 c2 X/ I5 q5 ?http://www.dreamloader.net/?action-viewthread-tid-225 z* ~3 ]) l* z- U
& R" S! X, h; F/ E- P如果你想直接在lua中调用你制作的DLL 下列是一个最简洁的方法 即使用lua的require函数. s; V& B& H1 `/ L Q
$ h$ d ]1 `/ C- x- L! j$ M( s- o1.在c++中创建一个DLL/ w. _' F9 [) p
CODE:" d2 V3 w# e: P& t+ x6 V' u
. v s; b7 ~& J0 i
' X* J# [ T4 Q* T( E$ n* U
//lua_net.cpp 8 T8 g( m* [. r: ]% Q) ]/ {) A
% X" p- N" n2 G7 M% D8 \5 \$ p#include <windows.h>
d E5 q9 M1 ?8 L& D, m3 S. j#include "..\lua\include\lua.hpp"
, A" s) }2 G# ]# a
$ G) a2 C, ~( j9 \//open
9 c; l% X6 ^1 s8 z9 ?static int net_Open(lua_State* L)
4 ^# o% W. ?, O6 j. C{
, ]/ P% u4 x' W0 J. z& @* q lua_pushstring(L,"net open");
; s8 {8 Q8 {, r1 p+ i return 1;
: V" [: \9 L; k3 K}
% b( ~. w: z; @' z; G7 c
% z/ h1 P% [6 X; G% q//close 4 A! b( O: ^# Z5 X8 m) V
static int net_Close(lua_State* L) - K t$ a* \5 s/ K$ {. r, r' z
{ X M. k \& e6 F% b& m1 K
lua_pushstring(L,"net close"); $ E! ]' A3 k6 ] E! l
return 1;
8 N* B. X2 H! x4 {" K T} 2 b& }: @ v) G! B# b
4 b: z5 p' m% B( X
^* @% F% `! ~+ g! `9 }7 Y$ F9 Z- L2 }3 \+ ^# r
) r) J3 k, Z5 P) v+ O0 @extern "C"{ 7 y! Y% D! Q4 @+ L9 o2 H, J+ v. F+ Q
" Y4 Z0 ?: H. O8 \- _$ c% r__declspec(dllexport)
- G7 m; Q# @& A: ]3 W" \; v! r" o3 M1 v0 D7 I
int luaopen_lua_net(lua_State *L)
4 B- k% b* Q& a- I5 _2 \# }{
( y: ?, X0 U% ?) K luaL_register(L, "netClose", net_Close);
' V9 S' t% c2 b8 C& Z( e1 o, W% ~ luaL_register(L, "netopen", net_Open);
6 r% \# \8 [ H( M0 p, `; \ return 1; 7 d8 Z5 g; O8 Q; M4 e
}
6 p2 U% P8 n1 |4 T, o; M1 E s x; n1 |% }4 w `! z& X
}$ x5 v0 O* b: R7 V+ v
2.把编译的dll 这里名为lua_net.dll 放到和main.exe同目录中或者自己另设目录 然后在lua中输入. e, f% R. L* h& j+ ^' w
CODE:9 e; Z$ ?9 R* ?" U
- B5 s3 D. a/ I
. j, e# e* o) [# l" v% Rrequire 'lua_net' * v, d/ g! a9 E& \6 n7 Q
print(net.open()) --显示netopen8 N8 {4 _, K. I- }7 x
print(net.close())--显示netclose
$ a T# n# _( S编译的前提是你下载有lua5 的源代码 可以到这里下载 http://www.lua.org/download.html
. M4 h- H( U& X" g% [& ~% Y8 L- B
& J" A/ v7 u a0 {* w8 _注:这是一种比较直接的方法 前提是需要你会使用c++ 适合高级用户使用 另外 我们也在尝试写一些通用函数
9 v+ H8 Y* N8 i7 y" u让用户直接在lua中调用DLL 而不需要有c++知识 例如在lua中直接输入:" J8 e6 b' t% _5 X3 F# _
CODE:, v( ~% S2 c$ i
7 {! a6 J+ b, C( m4 z5 T( U
: U4 m, k- b1 X8 Y d--读取dll$ f% I3 ^ {6 i+ v$ P' J% [
function1=loaddll("test.dll")$ M8 J6 e$ W" I6 E: M
( ?. w6 G; r4 h$ H2 O% L--执行得到的函数
; t( n9 y/ t. u& I5 V# ufunction1(参数1,参数2....) |