原文
5 j8 _3 T8 G! _, nhttp://www.dreamloader.net/?action-viewthread-tid-22
. }0 Q# b3 L* O% f- f$ d% a8 G3 Q T6 s
如果你想直接在lua中调用你制作的DLL 下列是一个最简洁的方法 即使用lua的require函数
$ `0 R* B' ]9 F5 D, h& e7 z/ T9 Z
' p; F) T: X* F M7 y: [1.在c++中创建一个DLL2 r6 v, ?* U! y! _5 [
CODE: f- |6 r" M0 T! @
$ e4 Y% e- E/ k) V3 ^" O
: X* v( B4 O' v: }. z3 m//lua_net.cpp ; t, @/ K* G/ k% l, b3 j% w
. m3 B, k4 H; b: ?+ R
#include <windows.h> ; m; U4 f( f! P7 o# i# k% g
#include "..\lua\include\lua.hpp"
' @4 V; [- f2 l0 M" l, h7 j6 _/ s0 [' u# Y
//open 6 W$ y% x% ~1 ^
static int net_Open(lua_State* L) ) _8 z7 T+ q7 U3 k' d/ R c# Y0 K
{
! E/ C/ }4 F3 }1 h/ L! { lua_pushstring(L,"net open"); + F& X+ `( L1 v) }
return 1;
d- q' ]/ S0 B}
% d Z: Z3 ?& v9 c( [9 P
1 Y/ ?( b5 S( |' B2 _1 c+ A( c//close
" u! O; b n" K, b2 W [) _! F% Fstatic int net_Close(lua_State* L)
' N8 Y0 m5 }! L) L4 `{
+ }1 x- B, l4 K* F) | lua_pushstring(L,"net close"); 0 x' M. H2 Y; j: Y2 S' z" ~" S) e
return 1;
( S3 T. i: t: b6 G}
; H5 F' t o: S& g3 s# K) M
( q. ~# B+ o6 M. r# E( N
/ \6 F$ r/ D: S0 n, @. A
3 x: Y/ s% L( l8 x: O
6 L/ N: @0 }1 O- O6 t8 T: \extern "C"{ j* ^3 C6 V& i* t" K9 g# V
3 G) z F$ v- u; `) y/ P! ?__declspec(dllexport)
/ E/ J6 ?6 Y% o) p1 R1 t
& y" d1 k" Q2 @( n8 Jint luaopen_lua_net(lua_State *L) - q! Q! M& v2 t, G: w
{
$ n3 {& }; ^9 i( h9 I' ]+ W luaL_register(L, "netClose", net_Close);
0 j9 u6 F) m, ^( Y7 O. g9 M; m- H! i" b luaL_register(L, "netopen", net_Open);
8 k: R9 Y3 x, H j) X0 q5 N/ `! C return 1;
; t* z. ?3 z9 |} 3 q" H0 n% O, s3 K
$ ~* i8 F: z; h- H}
" k0 p( t4 A4 _5 w2.把编译的dll 这里名为lua_net.dll 放到和main.exe同目录中或者自己另设目录 然后在lua中输入
5 l/ m) g! T1 `9 a& |% M* [0 vCODE:) o" U& v$ ?3 M+ ]
* b* f9 C7 @! i2 L6 Q
) A2 b$ ?: q( j. {
require 'lua_net'
4 w8 G/ |/ ?& b; q( hprint(net.open()) --显示netopen3 ^' |# O" c0 d E
print(net.close())--显示netclose9 L! m' N: g! A/ x# n
编译的前提是你下载有lua5 的源代码 可以到这里下载 http://www.lua.org/download.html
6 ~- d% W- G$ {; z- r! `$ m7 V3 [0 M m9 P& Y# x7 k) U% p
注:这是一种比较直接的方法 前提是需要你会使用c++ 适合高级用户使用 另外 我们也在尝试写一些通用函数 " \, V' B, r* U- v
让用户直接在lua中调用DLL 而不需要有c++知识 例如在lua中直接输入:
4 b- f1 y1 n5 eCODE:! }. f. W8 j: \; w) h3 N
& Z4 C4 F* e+ |, [2 L/ f$ r
! R* O* w% X0 O* N0 }--读取dll
* g: h3 e, j6 q( T4 Yfunction1=loaddll("test.dll")% j! ^0 s1 i" o! [
5 j) _4 X( y9 Q7 t/ L2 A--执行得到的函数0 ?" ~3 w- r3 L7 m g `* W5 B
function1(参数1,参数2....) |