[笔记]Lua脚本学习笔记《二》调用cpp动态库

方法一

创建VS dll项目

#ifndef CPP_DLL_API_H
#define CPP_DLL_API_H

#ifdef __cplusplus
#define EXTERN_C extern "C"
#else
#define EXTERN_C extern "C"
#endif

#ifndef EXPORT_API
#define EXPORT_API EXTERN_C __declspec(dllexport)
#else
#define EXPORT_API EXTERN_C __declspec(dllimport)
#endif


#endif
#include "cpp_dll_lib_api.h"

extern "C"{
#include <lua.h>
#include <lauxlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <lualib.h>
#include <math.h>
}

#include <Windows.h>


EXPORT_API int Add(lua_State *L){
	int param_count = lua_gettop(L);
	if (param_count != 2) {
		lua_pushnil(L);
		lua_pushstring(L, "ShowMessageBox: param num error");
		return 2;
	}

	int arg1 = luaL_checknumber(L, 1);
	int arg2 = luaL_checknumber(L, 2);

	lua_pushnumber(L, arg1 + arg2);
	
	return 1;
}

EXPORT_API int ShowMessageBox(lua_State *L)
{
	int param_count = lua_gettop(L);
	if (param_count != 2) {
		lua_pushnil(L);
		lua_pushstring(L, "ShowMessageBox: param num error");
		return 2;
	}

	const char * sTitle = luaL_checkstring(L, 1);
	const char * sText = luaL_checkstring(L, 2);

	if (sTitle == NULL || strlen(sTitle) == 0 || sText == NULL || strlen(sText) == 0) {
		lua_pushnil(L);
		lua_pushstring(L, "ShowMessageBox: param error");
		return 2;
	}

	int ret = MessageBoxA(NULL, sTitle, sText, 0);
	lua_pushnumber(L, ret);
	return 1;
}

Lua脚本

将dll放到lua/clib中

local pf = package.loadlib("cpp_dll_lib.dll","ShowMessageBox")
print(pf)
pf("hello", "again")

dumpbin查看导出函数

dumpbin.exe /exports .\cpp_dll_lib.dll

在这里插入图片描述

dumpbin在(不同版本vs不同路径 我这里是vs2013的)
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin

效果

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二进制怪兽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值