当前位置: 首页 > news >正文

爬虫做网站相关教程小米网络营销案例分析

爬虫做网站相关教程,小米网络营销案例分析,广西远伟网络科技有限公司,百度网盘如何获得2t免费空间系列文章目录 lua调用C\C动态库函数 系列文章目录摘要环境使用步骤你需要有个lua环境引入库码代码lua代码 摘要 在现代软件开发中,Lua作为一种轻量级脚本语言,在游戏开发、嵌入式系统等领域广泛应用。Lua与C/C的高度集成使得开发者能够借助其灵活性和高…

系列文章目录


lua调用C\C++动态库函数

  • 系列文章目录
  • 摘要
  • 环境
  • 使用步骤
    • 你需要有个lua环境
    • 引入库
    • 码代码
    • lua代码


摘要

在现代软件开发中,Lua作为一种轻量级脚本语言,在游戏开发、嵌入式系统等领域广泛应用。Lua与C/C++的高度集成使得开发者能够借助其灵活性和高效性实现更强大的功能。本文将通过一些简单、直接的示例探讨Lua调用C/C++函数的技术。Lua通过调用C/C++实现的extern "C"函数来交互,首先,我们需要在C/C++中编写适当的包装函数,并使用Lua API将其注册到Lua虚拟机中,这一过程包括参数的传递、函数调用以及返回值的处理。通过合理设计的接口,生成动态库文件使其在lua脚本中用require引用,我们能够在Lua中直接调用C/C++函数,实现跨语言的功能扩展。这为项目提供了更大的灵活性,允许开发者在Lua中编写高层逻辑,同时利用C/C++的性能优势处理底层任务。从实践角度看,Lua调用C/C++的技术架构在提高代码可维护性和性能的同时,也为项目带来了更强大的扩展性。通过深入学习Lua与C/C++交互的原理和最佳实践,开发者可以更好地应用这一技术,提升项目的开发效率和整体性能。

还有一种提供C API给lua用的方法:把lua的源码clone一份自己改,定义一个library导出,然后编译成可执行文件或者库,那么lua依然可以通过require引入和使用。


提示:以下是本篇文章正文内容,下面案例可供参考

环境

软件版本
Windows10
visual studio2022
lua5.1
C++17

使用步骤

你需要有个lua环境

在lua官网下载编译好的动态库、静态库、头文件和可执行二进制文件。
https://luabinaries.sourceforge.net/

拿到lua.hpp头文件和lua5.1.lib静态库,加到自己项目的引用。

引入库

lua.hpp头文件去安装目录找。

码代码

头文件

代码如下(示例):

#pragma once
/*
几个简单的函数
*/// step 1
#include "lua.hpp"// step 2 定义自己的函数
int addTwoNumber(int a, int b)
{return a + b;
}const char* linkNameAndNumber(const char* name, int age)
{std::unique_ptr<char> pbuf(new char[128]);sprintf(pbuf.get(), "Your name is %s, and %d years old.", name, age);std::string r(pbuf.get());std::cout<<"C source output " << r << std::endl;auto rbuf = new char[128];memcpy(rbuf, pbuf.get(), sizeof(pbuf.get()));std::cout << rbuf << " buffer content" << std::endl;return rbuf;
}const wchar_t* wLinkNameAndNumber(const wchar_t* name, int age)
{std::unique_ptr<wchar_t> pbuf(new wchar_t[128]);wsprintf(pbuf.get(), L"Your name is %s, and %d years old.", name, age);std::wstring r(pbuf.get());std::wcout << L"C source output " << r << std::endl;return r.c_str();
}/*** step 3 定义函数的wrapper* \brief origin function* \param L* \return*/
extern "C" int addTwoNumberWrapper(lua_State * L)
{double a, b, sum = 0;int pCount = lua_gettop(L);for (int i = 0; i <= pCount; ++i){if (i == 1){a = lua_tonumber(L, i);}else if (i == 2){b = lua_tonumber(L, i);}}sum = addTwoNumber(a, b);lua_pushnumber(L, sum);return 1;
}extern "C" int linkNameAndNumberWrapper(lua_State * L)
{int pCount = lua_gettop(L);const char* name = lua_tostring(L, 1);int age = lua_tointeger(L, 2);auto result = linkNameAndNumber(name, age);lua_pushstring(L, result);return 1;
}

dllmain.cpp

/*** step 4 定义函数的wrapper注册表* \brief function registry table*/
static luaL_Reg cMethods[] = {{"addTwoNumber", addTwoNumberWrapper},{"linkNameAndNumber", linkNameAndNumberWrapper},{NULL, NULL}
};/*step 5 创建lua_openlibrary函数
*/
extern "C" __declspec(dllexport)
int luaopen_MyMethodLib(lua_State * L)
{std::cout << "=========载入MyMethodLib库======" << std::endl;const char* libName = "MyMethodLib";luaL_register(L, libName, cMethods);return 1;
}

Windows平台生成的动态库可以使用visual studio命令行工具的dumpbin /exports 查看导出符号表,检查函数导出情况。

生成的动态库放到lua安装目录下或者自己的lua脚本目录下。

lua代码

local myMethodLib = require("MyMethodLib")local r1 = myMethodLib.addTwoNumber(1,2)
local r2 = myMethodLib.linkNameAndNumber("Michael",67)print(r1, r2)

使用lua.exe运行脚本即可。

http://www.yayakq.cn/news/52915/

相关文章:

  • 沧浪网站建设排名好的青岛网站建设
  • 网站盈利模式设计企业网站教程
  • 织梦手机网站教程做网站对象存储
  • 搞笑网站源代码北京装饰公司排行 2019
  • 网站备案需要ftp吗电子商务网络技术
  • 做网站需要服务器吗网站建设素材
  • 网站建设力度网站开发 招聘
  • 杭州群游科技网站做的魔域广州有什么好玩的地方适合小朋友
  • 邳州做网站pzwode单位做网站注意什么问题
  • 响应式网站设计制作中国重点城镇建设集团网站
  • 网站建设交付物清单南昌做网站的公司有哪些
  • 锦州网站建设动态郑州网站建设 易云互联
  • 厦门做百度推广的网站wordpress无法加载预览图片
  • 网站改版换域名微信朋友圈产品推广语
  • 网站升级改造建设方案wordpress怎么让文章只显示摘要
  • linux主机上传网站上海中国建设银行网站
  • 梧州网站设计理念城市房产网
  • 计算机网站php设计代做dedecms 网站安全设置
  • 网站开发公司的凡科平台送审严格吗
  • 网站网页制作的步骤是什么普通下载app安装app
  • 网站开发中英文版如何写购物网站排名前十
  • 网站模块分类网站工作沟通及建设
  • 苏州建网站的公司wordpress连接设置方法
  • 简述网站建设与维护设计网站手机app客户端
  • 徐州赶集网招聘信息什么是优化营商环境
  • 放单网站建设定制网站为什么贵
  • 网站建设推销员话术建设集约化网站的进展情况
  • 网站建设策划书 备案郑州短视频培训机构
  • 宜昌网站建设选择宜昌慧享互动长沙 网站设计 公司
  • 深圳网站建设计wordpress字体编辑器