原文
, w2 Z0 e( ~7 @) Ihttp://www.dreamloader.net/?action-viewthread-tid-22( G4 g0 B9 E- Z( s+ K, U
. C* M5 i% Z7 u4 H5 v; P
如果你想直接在lua中调用你制作的DLL 下列是一个最简洁的方法 即使用lua的require函数
9 b. [7 ^3 U! X' g
* q: X! g* e' H8 Q: D7 J1.在c++中创建一个DLL' |4 }4 B) K9 J9 |7 b" O! N
CODE:. ~% |; q- L: @& t3 t' ?9 k: A
- j2 m0 Q7 [9 U0 G8 ^$ [0 I4 l2 }; \6 G0 Q( G
//lua_net.cpp / E9 r6 \! ^8 @; r% `, \
' `0 i7 m/ P9 B. `& K9 U#include <windows.h>
7 g$ ~ T* h7 n$ X P# M#include "..\lua\include\lua.hpp"
! I, k G/ t( R2 w" P
) @; b# M8 V% m8 O2 B//open : V0 C, V+ C8 x- \: X; J
static int net_Open(lua_State* L)
) Y8 x3 ?! B8 X, W v{
; j! X/ J" b& g6 _+ k2 e7 F lua_pushstring(L,"net open");
3 ]$ N* k- G- A* q$ x: s return 1;
0 t) p9 T/ C5 _} ! d" l! W8 k# g0 d0 k, X) z
2 X* H3 E/ H& U, J$ r# d& q
//close 1 g# u9 m5 Q3 F: k/ P" o* f" D
static int net_Close(lua_State* L)
8 g5 [$ t! c# Y( M3 x9 S{
! i& t7 c! s, p7 s( X# `3 u lua_pushstring(L,"net close"); 1 e- @2 v" h+ I) C) l$ P6 Y) Q
return 1;
" t! R1 \$ ~# d9 `$ g}
5 M7 u" v% h6 A! d. A$ k1 Z6 o6 G. O e) J! G) Q
* i4 Z* o" N- d8 j( A* S- E- D$ k; D+ b5 ]5 O& a
& `' p! k& L9 |5 l) r8 e6 V
extern "C"{
' ]; F2 m/ Y8 z, ~# v) B3 {
( K' t& H/ f6 t$ H__declspec(dllexport) ; J* R0 q. d+ w4 h9 ]) _) Y0 r
- r5 r1 h$ E$ h) q% ~
int luaopen_lua_net(lua_State *L)
- ~% f! l8 f( E4 Q+ b{
' f5 r" _7 D' q3 @ luaL_register(L, "netClose", net_Close); ( O k) K' P! t0 v, b' j9 [
luaL_register(L, "netopen", net_Open); 4 q" ]7 a, a. a+ @: v5 b8 H' _9 i
return 1; ; X% u. d+ d! l3 D
}
$ i+ [0 x7 `% M( k
$ j* o; `6 f1 D& P, K1 u2 b: q}. H2 J& Q6 r2 e+ z8 W1 A2 f$ f: R
2.把编译的dll 这里名为lua_net.dll 放到和main.exe同目录中或者自己另设目录 然后在lua中输入
% p* `2 [: |0 A3 z$ s& fCODE:9 o6 `! E$ [+ k9 d
/ C; i# s: o8 v6 b- L- c r3 l3 E2 T% M% \. h7 q% e4 V+ ~0 j
require 'lua_net'
& c% N% k3 D- G5 L" g# Jprint(net.open()) --显示netopen( t f; V6 N* j$ p; Z6 \
print(net.close())--显示netclose7 ]2 W* c% h B0 A0 R. H5 c5 ?
编译的前提是你下载有lua5 的源代码 可以到这里下载 http://www.lua.org/download.html8 B1 e3 z) s$ t2 Y6 P' i
, i% z: p, }1 Z- D2 J( A/ n注:这是一种比较直接的方法 前提是需要你会使用c++ 适合高级用户使用 另外 我们也在尝试写一些通用函数
/ t+ ~9 C# @5 w& \; o让用户直接在lua中调用DLL 而不需要有c++知识 例如在lua中直接输入:+ \/ i# g% n0 U+ F
CODE:
0 T. g8 D' t0 {- P+ j
4 x+ v! F$ k* D- M, T# V
/ h+ c# @- {! y7 t, Z0 a8 J4 K--读取dll9 c; Q7 N" V9 x( j9 @7 e& o
function1=loaddll("test.dll")
7 z- A# k/ F- W& f! k. V
+ @+ i# E) C+ f0 r" o( u2 H--执行得到的函数
2 e, c; ^% d4 l) ^, N+ l. l. k$ Ifunction1(参数1,参数2....) |