原文链接:http://www.nicemxp.com/articles/1
刚刚学习lua,学习到如何将C/C++函数接口注册到lua环境中,使之可以在lua被调用。
在http://www.lua.org/ftp/点击打开链接处下载lua-5.1.5源码
使用C语言写一个base64编码的函数接口,函数参数为输入字符串,输入字符串长度,输出字符串长度。返回值为编码后的字符串
注册到lua的方式有两种,一种是lua解释器如果支持动态链接,使用动态链接机制,将函数接口编译成动态链接库,然后将动态链接库放到lua的C路径(LUA_CPATH)中(例如可以放在跟lua源码文件同一目录下),然后直接使用require "base64",这句话会使自己编写的动态链接库链接到lua,并寻找luaopen_base64,将模块注册到package.loaded中。另一种方式是直接将自己写好的接口函数与lua源文件一起重新编译生成一个新的lua解释器,使用新的解释器代替旧的。此外,还需要以某种方式来告诉解释器,它应在打开新状态的同时打开这个模块,最简单的做法是将luaopen_base64加到luaL_openlibs会打开的标准库列表中,这个列表在文件linit.c中。
1.使用动态链接库方式将接口注册到lua环境
源码:
// base64.cpp : 定义 DLL 应用程序的导出函数。
//
#include <stddef.h>
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
extern "C"
{
#include "lua.h"
#include "lauxlib.h"
#include "lualib.h"
char code[65] = {
'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f',
'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n',
'o', 'p', 'q', 'r', 's', 't', 'u', 'v',
'w', 'x', 'y', 'z', '0', '1', '2', '3',
'4', '5', '6', '7', '8', '9', '+', '/',
'='
};
char* trans(const char* str, unsigned int num)
{
char* res = (char*)malloc(sizeof(char) * 4);
unsigned char* s = (unsigned char*)str;
*res = *s >> 2;
*(res + 1) = ((*(s + 1) >> 4) + (*(s) << 4)) & 0x3f;
*(res + 2) = ((*(s + 1) << 2) + (*(s + 2) >> 6)) & 0x3f;
*(res + 3) = *(s + 2) & 0x3f;
return res;
}
char transform(char s)
{
return

最低0.47元/天 解锁文章
1787

被折叠的 条评论
为什么被折叠?



