原文, _- ~: ]$ {% d! q& J$ E
http://www.dreamloader.net/?action-viewthread-tid-22
4 t( h. n7 Q: K( k* k: v8 b" K+ p+ U$ b. n+ x
如果你想直接在lua中调用你制作的DLL 下列是一个最简洁的方法 即使用lua的require函数
- H: Z" ^0 ~1 j4 N6 ]4 m& \6 c4 l+ g9 i& M
1.在c++中创建一个DLL5 Z8 b: l+ W: E0 p4 Q. x3 s
CODE:* Y4 y/ k c7 r6 l5 E
2 K$ q) i+ _/ I
* M/ R$ [) ?! o" o; \//lua_net.cpp
1 q5 d8 @! e, O
; r& t( g: ~" C+ E0 z- u#include <windows.h> 9 G$ h8 d$ e2 f' k) n5 N; Z) A
#include "..\lua\include\lua.hpp" ; G8 Q6 T8 @" [* k3 M2 W
' Q# n5 n ^ N0 B* K+ h* l- F+ w3 t: X
//open
; F) G2 N8 e$ T% Ustatic int net_Open(lua_State* L)
) |2 C3 P. ~1 {" B; q{ & ^. c0 R R2 {
lua_pushstring(L,"net open");
5 V6 `4 U$ ^6 |+ I5 \ return 1;
- E* ~ e( f% H; _} ; M% r! V7 o9 P, y. d. n1 B
/ a$ g+ X/ j! P4 F4 F, L6 @1 B( e//close 6 y+ z9 L; t1 |: A6 @
static int net_Close(lua_State* L)
5 @* U" g! O o- N- _5 j* @0 b+ B2 u{ & y6 y) W4 |8 b! F1 z
lua_pushstring(L,"net close"); + I1 N% a, Z/ }7 \; i2 W3 G
return 1;
( R8 R X) N' y1 N O7 ~}
( o/ e8 O1 C$ |6 J4 ?- x8 b4 l
8 S' l" n3 ]2 ~
/ C1 b! _4 `9 X1 ~" p1 K" J' ]
5 @# K) Q( a; E$ g) e. i7 a3 i3 h- w' o5 e8 B
extern "C"{
) \& G% N0 c) I, @3 o/ i
T# v% Y. S; Y2 k8 l__declspec(dllexport) ( S7 W. N5 [# `& r: r0 z
* c0 p, H# V5 ~) X K+ u9 P
int luaopen_lua_net(lua_State *L)
2 Q; U: K) S& N: D7 `{ ( L2 b; p) T/ [2 u% g9 A
luaL_register(L, "netClose", net_Close); * A4 Y! ~6 g5 a* u
luaL_register(L, "netopen", net_Open);
- V: r0 n9 @) h$ n return 1;
) ]3 N0 _2 A7 s2 F3 r3 t3 y6 X}
- X! B2 L" k/ ?0 B8 M+ b; v' X
7 v5 Q! G8 W. t% k. i}/ S& k9 ^6 e- \ U0 [; i: ]
2.把编译的dll 这里名为lua_net.dll 放到和main.exe同目录中或者自己另设目录 然后在lua中输入; k0 l9 d6 } ?+ c2 l: I
CODE:
( \# ~0 `( A7 U6 ]0 w# l5 k6 z2 g# j1 n
W% E( F! a6 e. m8 l
require 'lua_net'
) k5 d& m& O, g% rprint(net.open()) --显示netopen4 d( E- T7 \. A8 a
print(net.close())--显示netclose' O( k& o5 h( q& d5 d. Q" R" u: M! Y
编译的前提是你下载有lua5 的源代码 可以到这里下载 http://www.lua.org/download.html9 o, e- k! E4 y! J+ h* @
5 Q0 _# X2 e% l ^- P注:这是一种比较直接的方法 前提是需要你会使用c++ 适合高级用户使用 另外 我们也在尝试写一些通用函数 3 P, [( D4 C$ o/ {
让用户直接在lua中调用DLL 而不需要有c++知识 例如在lua中直接输入:( X3 `# c0 D: P; n" j
CODE:, p" J) n+ ^0 J: d! M7 I. e! t4 a
1 Y6 y" d6 n! F
6 L/ {! c4 u7 Q, S7 J; l9 K, G--读取dll; x6 p* R7 X/ y
function1=loaddll("test.dll")
; Z' I' s( e1 }( [% i' V1 O! G: v6 K2 g0 K1 ? l5 G0 y
--执行得到的函数! o4 N. @- n4 |& j2 M3 s: C
function1(参数1,参数2....) |