export.h
#ifndef _ACTS_ZIP_H_
#define _ACTS_ZIP_H_
extern "C"{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
#pragma comment(lib,"lua5.1.lib")
#ifdef ACTS_ZIP_DLL
#define ACTS_ZIP_DLL_API_ __declspec(dllexport)
#else
#define ACTS_ZIP_DLL_API_ __declspec(dllimport)
#endif
#ifdef __cplusplus
extern "C" {
#endif
ACTS_ZIP_DLL_API_ int LuaZip(lua_State* L);
ACTS_ZIP_DLL_API_ int LuaUnZip(lua_State* L);
ACTS_ZIP_DLL_API_ int LuaOpenLuaZipAPI (lua_State* L);
#ifdef __cplusplus
}
#endif
#endif
export.cpp
#include <Windows.h>
#include "stdafx.h"
#include "export.h"
#include "zip.h"
#include <tchar.h>
#include "ActsZipAPI.h"
int LuaUnZip(lua_State* L)
{
const char* zipFileName = lua_tostring(L,1);
const char* targetDir = lua_tostring(L,2);
bool flag = false;
flag = UnActsZip(zipFileName,targetDir);
lua_pushboolean(L,flag);
return 1;
}
int LuaZip(lua_State* L)
{
const char* dir = lua_tostring(L,1);
const char* fileName = lua_tostring(L,2);
const char* targetName = lua_tostring(L,3);
bool flag = false;
flag = ActsZip(dir,fileName,targetName);
lua_pushboolean(L,flag);
return 1;
}
static const struct luaL_Reg LuaZipAPI[]={
{"LuaZip",LuaZip},
{"LuaUnZip",LuaUnZip},
{NULL,NULL}
};
int LuaOpenLuaZipAPI (lua_State* L)
{
luaL_register(L,"LuaZipAPI",LuaZipAPI);
return 1;
}
生成动态链接库(ActsZip.dll)放置于工程目录下,在lua文件中按照如下方式调用
local LoadFunc = package.loadlib("../ActsZip.dll","LuaOpenLuaZipAPI")
if nil ~= LoadFunc
then LoadFunc()
end
LuaZip = LuaZipAPI
LuaZip.LuaZip(Cfgpath,"",filePath)
LuaZip.LuaUnZip(filePath,Cfgpath)