原文
0 W- K, H n! H* ]& `) Y8 rhttp://www.dreamloader.net/?action-viewthread-tid-22
/ {0 t' u4 X( p& n. R2 ]5 [
0 M( b n2 q. E% e如果你想直接在lua中调用你制作的DLL 下列是一个最简洁的方法 即使用lua的require函数
2 w5 f2 f, t6 y8 U' {. n7 s8 ~+ q6 _
1.在c++中创建一个DLL
1 ?0 |0 R7 [" F% j6 RCODE:' I8 t/ K% V: b# Z7 C
; m- U3 Y4 @/ z0 a+ N/ C0 J3 `8 F, d, L5 C. z3 Q2 U
//lua_net.cpp : _$ q: W: ~3 [3 i7 F8 y, t
9 f2 X% w/ a# S0 K#include <windows.h>
# D0 ]3 j) E, M! B* M" k#include "..\lua\include\lua.hpp" 2 K W3 Y5 A3 ^: k. e
+ w$ q7 }2 b; l( M5 H) D/ ^//open
0 Q# p1 a2 `. g1 Astatic int net_Open(lua_State* L)
- S( e& b- T3 u, p% Z# z, A6 r{ ) L! d. x! l' e* S5 Q, D1 l3 M2 u
lua_pushstring(L,"net open");
/ Q2 S; f% m2 b return 1;
' i, n& |1 z3 [- ]) \}
+ W( G) d) ~. R/ L7 N" A* V; H S
- P% ~$ A% u1 g! f! X//close
) \5 N$ k8 T, estatic int net_Close(lua_State* L)
1 [/ Z, t, T7 i0 n{ & I X, _* v9 C7 |) F) U
lua_pushstring(L,"net close"); ( w+ u4 M( }* L
return 1; ' J, w2 v5 p Z
} 1 m9 {: u0 ]0 I6 J2 N( \- l2 D7 I) y
& t# y* m1 N: L: ?
$ ~: I1 @' _# W+ Z0 [
$ Q$ q4 u9 w q5 k; t
& Z6 r& w4 Y6 l) Iextern "C"{ - {) u0 d1 q; `6 `% e& G
: s3 m: m" [" s2 I
__declspec(dllexport) % Q3 l' x* ^" n+ Z5 k& d
+ m. f4 i) p( `
int luaopen_lua_net(lua_State *L)
+ B& n- c6 [6 w- p{
1 o8 c$ n0 C- W luaL_register(L, "netClose", net_Close);
1 A9 u7 ~, B! F8 r$ A" L luaL_register(L, "netopen", net_Open); , m& L4 N4 G3 v. k, A% c
return 1;
0 F, y# J7 O. ?6 a6 b2 t4 L! n6 P}
u# C' z1 H" B7 g% l7 I! N4 h" N- y. P, c: l R7 L
}
0 J$ p5 G4 \2 P' ]2.把编译的dll 这里名为lua_net.dll 放到和main.exe同目录中或者自己另设目录 然后在lua中输入8 _( s! N+ }% c+ B/ u
CODE:$ t1 ^) A1 [4 N8 G" ]4 [$ i7 T( E( U* ]
8 |" v" L- z3 T0 C) P# A2 H0 t" G `- v$ k$ k+ D( r
require 'lua_net'
- D: @+ h z+ }- |9 L, Xprint(net.open()) --显示netopen
5 E* B, T7 D2 p' D% k' \print(net.close())--显示netclose
- ]: R. r4 I) R) n; Y/ H编译的前提是你下载有lua5 的源代码 可以到这里下载 http://www.lua.org/download.html
& m" Z, Z! p7 t% Q! C
3 `1 S2 ?6 ~8 y3 u注:这是一种比较直接的方法 前提是需要你会使用c++ 适合高级用户使用 另外 我们也在尝试写一些通用函数 $ U- t5 o! o8 W9 E' K
让用户直接在lua中调用DLL 而不需要有c++知识 例如在lua中直接输入:
' X: L9 L+ J/ {2 ` [CODE:3 p9 R& H1 d& D1 G
& f9 E( n8 ^9 }# P: [! Y( m
0 T" X9 n! C% ]$ T--读取dll
' f: }0 n/ o6 Ufunction1=loaddll("test.dll")1 a9 G6 f3 A; O: a( ^/ b
# |4 X0 U8 h' a/ L9 o--执行得到的函数1 P& ]* p$ @; v
function1(参数1,参数2....) |