热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Lua中调用C语言编译的动态链接库

本文介绍了如何在Lua中调用C语言编译的动态链接库。通过详细步骤和示例代码,帮助开发者理解和掌握这一技术。参考了《Lua编程入门》一书中的相关内容,并结合实际操作经验,提供了更加清晰和实用的指导。此外,还探讨了在不同操作系统下编译和链接Lua的方法,为跨平台开发提供了有价值的参考。
  • 参考地址
看云上的《Lua编程入门》,比《Lua程序设计(第2版)中文》好多了
https://www.kancloud.cn/thinkphp/lua-guide/43809

SF上的编译Lua源码
https://segmentfault.com/a/1190000004904799

源码下载地址
http://www.lua.org/ftp/lua-5.3.4.tar.gz

SF的编译脚本挺酷的,脚本写好,确实省很多事。

上边基本把需要的知识点都讲通了,我讲一下遇到的问题,及处理

  1. 看云上的这里是错误的,或者是旧版本的语法
> require "WinFeature"
> for k, v in pairs(WinFeature) do
>>      print(k, v)
>> end
ShowMsgBox functon:0028AB90
>

需要改成

dlltest = require "WinFeature"
for k, v in pairs(dlltest) do
print(k, v)
end
dlltest.ShowMsgBox()

 

  2. 这段代码需要用新版本的函数

extern "C" __declspec(dllexport)  
int luaopen_WinFeature(lua_State* luaEnv)  
{  
    const char* const LIBRARY_NAME = "WinFeature";  
    luaL_register(luaEnv, LIBRARY_NAME, luaLibs);  

    return 1;  
} 

修改成

extern "C" __declspec(dllexport)
int luaopen_WinFeature(lua_State* luaEnv)
{
    const char* const LIBRARY_NAME = "WinFeature";
    luaL_newlib(luaEnv, luaLibs);

    return 1;
}

 

  3. 必须使用配套的 lua.dll lua.exe lua.lib

一开始使用别人编译的Lua.exe,跑Dll,会报错:“multiple Lua VMs detected”

 

  • 最后贴上运行的截图

Lua 如何调用C打包的动态库

 

 

 

Lua 如何调用C打包的动态库


推荐阅读
  • 本文详细介绍了如何使用 HTML 和 CSS 对文件上传按钮进行样式美化,使用户界面更加友好和美观。 ... [详细]
  • 利用YAML配置Resilience4J的Circuit Breaker
    本文探讨了Resilience4j作为现代Java应用程序中不可或缺的容错工具,特别介绍了如何通过YAML文件配置Circuit Breaker以提高服务的弹性和稳定性。 ... [详细]
  • Explore how Matterverse is redefining the metaverse experience, creating immersive and meaningful virtual environments that foster genuine connections and economic opportunities. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • python的交互模式怎么输出名文汉字[python常见问题]
    在命令行模式下敲命令python,就看到类似如下的一堆文本输出,然后就进入到Python交互模式,它的提示符是>>>,此时我们可以使用print() ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 本文作者分享了在阿里巴巴获得实习offer的经历,包括五轮面试的详细内容和经验总结。其中四轮为技术面试,一轮为HR面试,涵盖了大量的Java技术和项目实践经验。 ... [详细]
  • 深入解析Serverless架构模式
    本文将详细介绍Serverless架构模式的核心概念、工作原理及其优势。通过对比传统架构,探讨Serverless如何简化应用开发与运维流程,并介绍当前主流的Serverless平台。 ... [详细]
  • 云函数与数据库API实现增删查改的对比
    本文将深入探讨使用云函数和数据库API实现数据操作(增删查改)的不同方法,通过详细的代码示例帮助读者更好地理解和掌握这些技术。文章不仅提供代码实现,还解释了每种方法的特点和适用场景。 ... [详细]
  • Spring Cloud学习指南:深入理解微服务架构
    本文介绍了微服务架构的基本概念及其在Spring Cloud中的实现。讨论了微服务架构的主要优势,如简化开发和维护、快速启动、灵活的技术栈选择以及按需扩展的能力。同时,也探讨了微服务架构面临的挑战,包括较高的运维要求、分布式系统的复杂性、接口调整的成本等问题。最后,文章提出了实施微服务时应遵循的设计原则。 ... [详细]
  • 本文将详细介绍如何在ThinkPHP6框架中实现多数据库的部署,包括读写分离的策略,以及如何通过负载均衡和MySQL同步技术优化数据库性能。 ... [详细]
  • 京东云图片上传注册指南
    本文详细介绍了如何在京东云平台完成账号注册并实现图片上传功能,涵盖从注册到配置的完整流程。 ... [详细]
  • 字节跳动夏季招聘面试经验分享
    本文详细记录了字节跳动夏季招聘的面试经历,涵盖了一、二、三轮面试的技术问题及项目讨论,旨在为准备类似面试的求职者提供参考。 ... [详细]
author-avatar
赖-哥_528
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有