VC 6.0 编译支持中文的LUA5.23静态库

VC++6.0配置LUA环境和C++调用LUA的简单示例 VC++6.0配置LUA环境和C++调用LUA的简单示例一、VC++6.0配置LUA环境和C++调用LUA的简单示例LUA版本: 5.1.3   (http://www.lua.org下载lua 5.13源代码)编译lua 5.13源代码:(你可下载别人编译的,)配置LUA环境:工具→选项→目录,然后include files:见图(修改为你的LUA相应路径即可)library files:(同上)可执行文件:D:/PROGRAM FILES/LUA-5.1.3/LUA-5.1.3/BIN(可略)Test. 阅读详情

一,在LUA官网 http://www.lua.org/download.html下载LUA的 源文件.

二,新建一个lib工程,注意不勾选“Pre-Compiled header”支持,然后将源码文件里src下目录文件全部拷贝到新建的工程目录下,除了lua.c、luac.c(lua.c 是用来编译LUA解释器  Luac.c是用来编译LUA编译器)这三个文件之外,其他的文件都添加到工程中去.

三.选择菜单Porject->Settings, 将Release 设置 C++ 选项卡中的 PreCompiled Headers 选择 Not use precompiled headers 将Code Generation 下的
Use run-time library 选择 Multithreaded.将Library 选项卡下的Out file name 改成:Debug\LUA523.lib将Debug 设置 C++ 选项卡中的 PreCompiled Headers 选择 Not use precompiled headers 将Code Generation 下的Use run-time library 选择  Debug Multithreaded.将Library 选项卡下的Out file name 改成:Debug\LUA523_D.lib.

四.找到 llex.c 这个文件。找到stMultithreadedatic int llex (LexState *ls, SemInfo *seminfo)这个函数,以下代码是修改前的代码:

static int llex (LexState *ls, SemInfo *seminfo) {
  luaZ_resetbuffer(ls->buff);
  for (;;) {
    switch (ls->current) {
      case '\n': case '\r': {  /* line breaks */
        inclinenumber(ls);
        break;
      }
      case ' ': case '\f': case '\t': case '\v': {  /* spaces */
        next(ls);
        break;
      }
      case '-': {  /* '-' or '--' (comment) */
        next(ls);
        if (ls->current != '-') return '-';
        /* else is a comment */
        next(ls);
        if (ls->current == '[') {  /* long comment? */
          int sep = skip_sep(ls);
          luaZ_resetbuffer(ls->buff);  /* `skip_sep' may dirty the buffer */
          if (sep >= 0) {
            read_long_string(ls, NULL, sep);  /* skip long comment */
            luaZ_resetbuffer(ls->buff);  /* previous call may dirty the buff. */
            break;
          }
        }
        /* else short comment */
        while (!currIsNewline(ls) && ls->current != EOZ)
          next(ls);  /* skip until end of line (or end of file) */
        break;
      }
      case '[': {  /* long string or simply '[' */
        int sep = skip_sep(ls);
        if (sep >= 0) {
          read_long_string(ls, seminfo, sep);
          return TK_STRING;
        }
        else if (sep == -1) return '[';
        else lexerror(ls, "invalid long string delimiter", TK_STRING);
      }
      case '=': {
        next(ls);
        if (ls->current != '=') return '=';
        else { next(ls); return TK_EQ; }
      }
      case '<': {
        next(ls);
        if (ls->current != '=') return '<';
        else { next(ls); return TK_LE; }
      }
      case '>': {
        next(ls);
        if (ls->current != '=') return '>';
        else { next(ls); return TK_GE; }
      }
      case '~': {
        next(ls);
        if (ls->current != '=') return '~';
        else { next(ls); return TK_NE; }
      }
      case ':': {
        next(ls);
        if (ls->current != ':') return ':';
        else { next(ls); return TK_DBCOLON; }
      }
      case '"': case '\'': {  /* short literal strings */
        read_string(ls, ls->current, seminfo);
        return TK_STRING;
      }
      case '.': {  /* '.', '..', '...', or number */
        save_and_next(ls);
        if (check_next(ls, ".")) {
          if (check_next(ls, "."))
            return TK_DOTS;   /* '...' */
          else return TK_CONCAT;   /* '..' */
        }
        else if (!lisdigit(ls->current)) return '.';
        /* else go through */
      }
      case '0': case '1': case '2': case '3': case '4':
      case '5': case '6': case '7': case '8': case '9': {
        read_numeral(ls, seminfo);
        return TK_NUMBER;
      }
      case EOZ: {
        return TK_EOS;
      }
      default: {
        if (lislalpha(ls->current)) {  /* identifier or reserved word? */
          TString *ts;
          do {
            save_and_next(ls);
          } while (lislalnum(ls->current));
          ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
                                  luaZ_bufflen(ls->buff));
          seminfo->ts = ts;
          if (isreserved(ts))  /* reserved word? */
            return ts->tsv.extra - 1 + FIRST_RESERVED;
          else {
            return TK_NAME;
          }
        }
        else {  /* single-char tokens (+ - / ...) */
          int c = ls->current;
          next(ls);
          return c;
        }
      }
    }
  }
}

下面这段代码是修改后的:

static int llex (LexState *ls, SemInfo *seminfo) {
  luaZ_resetbuffer(ls->buff);
  for (;;) {
    switch (ls->current) {
      case '\n': case '\r': {  /* line breaks */
        inclinenumber(ls);
        break;
      }
      case ' ': case '\f': case '\t': case '\v': {  /* spaces */
        next(ls);
        break;
      }
      case '-': {  /* '-' or '--' (comment) */
        next(ls);
        if (ls->current != '-') return '-';
        /* else is a comment */
        next(ls);
        if (ls->current == '[') {  /* long comment? */
          int sep = skip_sep(ls);
          luaZ_resetbuffer(ls->buff);  /* `skip_sep' may dirty the buffer */
          if (sep >= 0) {
            read_long_string(ls, NULL, sep);  /* skip long comment */
            luaZ_resetbuffer(ls->buff);  /* previous call may dirty the buff. */
            break;
          }
        }
        /* else short comment */
        while (!currIsNewline(ls) && ls->current != EOZ)
          next(ls);  /* skip until end of line (or end of file) */
        break;
      }
      case '[': {  /* long string or simply '[' */
        int sep = skip_sep(ls);
        if (sep >= 0) {
          read_long_string(ls, seminfo, sep);
          return TK_STRING;
        }
        else if (sep == -1) return '[';
        else lexerror(ls, "invalid long string delimiter", TK_STRING);
      }
      case '=': {
        next(ls);
        if (ls->current != '=') return '=';
        else { next(ls); return TK_EQ; }
      }
      case '<': {
        next(ls);
        if (ls->current != '=') return '<';
        else { next(ls); return TK_LE; }
      }
      case '>': {
        next(ls);
        if (ls->current != '=') return '>';
        else { next(ls); return TK_GE; }
      }
      case '~': {
        next(ls);
        if (ls->current != '=') return '~';
        else { next(ls); return TK_NE; }
      }
      case ':': {
        next(ls);
        if (ls->current != ':') return ':';
        else { next(ls); return TK_DBCOLON; }
      }
      case '"': case '\'': {  /* short literal strings */
        read_string(ls, ls->current, seminfo);
        return TK_STRING;
      }
      case '.': {  /* '.', '..', '...', or number */
        save_and_next(ls);
        if (check_next(ls, ".")) {
          if (check_next(ls, "."))
            return TK_DOTS;   /* '...' */
          else return TK_CONCAT;   /* '..' */
        }
        else if (!lisdigit(ls->current)) return '.';
        /* else go through */
      }
      case '0': case '1': case '2': case '3': case '4':
      case '5': case '6': case '7': case '8': case '9': {
        read_numeral(ls, seminfo);
        return TK_NUMBER;
      }
      case EOZ: {
        return TK_EOS;
      }
      default: {
        if (lislalpha(ls->current) ||  ls->current > 0x80) {  /* identifier or reserved word? */
          TString *ts;
          do {
			  if(ls->current > 0x80)
			  {
				  save_and_next(ls);
				  save_and_next(ls);
			  }
			  else 
					 save_and_next(ls); 
//             save_and_next(ls);
          } while (lislalnum(ls->current) || ls->current > 0x80);
          ts = luaX_newstring(ls, luaZ_buffer(ls->buff),
                                  luaZ_bufflen(ls->buff));
          seminfo->ts = ts;
          if (isreserved(ts))  /* reserved word? */
            return ts->tsv.extra - 1 + FIRST_RESERVED;
          else {
            return TK_NAME;
          }
        }
        else {  /* single-char tokens (+ - / ...) */
          int c = ls->current;
          next(ls);
          return c;
        }
      }
    }
  }
}
五,分别用Release 和Debug 编译.

六.建立文件夹 lua_lib_include,在lualib_include中再创建文件夹lib和include,将刚才编译的LUA523.lib和LUA523_D.lib文件添加到lib下,将lauxlib.h、lua.h、luaconf.h、lualib.h几个头文件加入到include下。

七.在lua_lib_include文件夹外面创建一个luainc.h文件,在里面写入代码:

#ifndef __LUA_INC
#define __LUA_INC

#ifdef __cplusplus
extern "C" {
#endif

    #include "lualib_include/include/lua.h"
    #include "lualib_include/include/lauxlib.h"
    #include "lualib_include/include/lualib.h"

#ifdef __cplusplus
}
#endif

#ifdef _DEBUG
#pragma comment(lib,"lualib_include/lib/LUA523_D.lib")
#else
#pragma comment(lib,"lualib_include/lib/LUA523.lib")
#endif

#endif

以后要用LUA的时候只需要将lua_lib_include文件夹与luainc.h文件复制到工程下,然后在需要用到的地方include"luainc.h"即可。

这样编译在DLL里调用静态库也不会出错.


VC6.0配置LUA编译环境 VC6.0配置LUA编译环境及LUA调用C++函数的简单示例 一步一步教你配置 立即下载

相关推荐

C# lua库 支持中文函数名中文变量

C# lua库 支持中文函数名中文变量,基于lua 5.1

Windows下用VC6.0编译Lua源码 生成静态库和动态链接库

1、 下载Lua源代码 到 http://www.lua.org/download.html 官网下载,我下载的是 lua-5.3.0 版本,解压源码包,得到 src 文件夹,这例有我们下面编译需要的文件 也可以到我的百度网盘下载用VC6构建好的工程 http://pan.baidu.com/s/1hMHm2 当然也需要个编译器,这里我用的是Microsoft Visual C++

Totohack的专栏 2800

支持中文函数和变量的Lua 5. 3. 2源码

支持中文函数和变量的Lua 5. 3. 2源码,直接可以用VS编译成静态或动态库~~~

VC6.0配置LUA编译环境及LUA调用C++函数的简单示例

VC6.0配置LUA编译环境及LUA调用C++函数的简单示例  | 在http://www.lua.org,下载了lua 5.13源代码下来,一共有四个目录:doc | src | test | etc ;然后按网上的教程用VC6来编译出LUA的编译器和解释器(已经成功编译出两个lib,core.lib、standard.lib): 第一步:编译出两个lib core.lib:新建静态连接

zbx91的专栏 781

易语言vc6封装的lua5.33支持库源码

资源介绍:。重要细节必看--------->。1,所有的工程项目必须统一使用一样的运行库,例如多线程(/MT).2,统一使用一个版本的编译器(例如vc6编译器)编译.设置方法如下:。统一用mt运行库,包括lua5.33sdk生成的lib,fne,fne改的静态库lib。项目->属性->c/c++->代码生成->运行库->多线程(/MT)。不然会有各种编译出错。重要细节必看--------->。需要做的事。1,。下载古老的vc6。2,把古老的vc6编译器拖到你的易语言安装目录下,有的则跳过(例如VC98linker目录)。资源作者:。@cs666。资源下载:。

Fedora 41上安装钉钉7.6.25,我踩过的那些依赖坑和最终解决方案

本文详细记录了在Fedora 41上安装钉钉7.6.25版本的全过程,包括解决依赖问题、转换deb包为rpm格式、处理libm.so.6错误等关键步骤。通过分享这些实用技巧和最终解决方案,帮助Linux用户顺利在Fedora系统上运行钉钉客户端,提升工作效率。

weixin_30485379的博客 206

vc6 编译lua5.3.3

前言在工程中直接用lua, 包进来编译,去掉.c依赖的预编译文件stdafx.h, 去掉.c中包含的main函数实现.就可以编译过。我今天要用lua.exe编译一个lua的obj出来, 想自己编译一个lua.exe. 看他工程下有Makefile, 在vc6环境中, 去目录中make, 编译不过,看帮助,也没啥说明,有点晕. 去google,才知道人家是怎么编译lua.exe. 最好玩的是有个人用

博客标题不能为空 1156

UFS Write Booster技术解析:原理、配置与故障排查实战

在存储技术领域,缓存机制是提升I/O性能的核心手段之一,其原理是通过高速存储介质暂存数据,减少对低速主存储的直接访问,从而降低延迟、提升吞吐。Write Booster正是这一原理在UFS(通用闪存存储)规范中的具体实现,它通过引入独立的易失性高速缓存区(Write Booster Buffer),将主机写入命令快速响应与后台数据持久化分离,技术价值在于显著改善随机写入性能,消除由垃圾回收等后台操作引发的写入卡顿。该技术广泛应用于智能手机应用安装、相机连拍、固件升级(OTA)等对写入流畅性要求高的场景。本文

weixin_42561143的博客 356

lua源码编译linux,Windows下编译Lua源码

因为之前一直使用首先从所有的lua源码都放在了 src 文件夹下,当然,不同的lua版本目录结构有可能不一样,但是都会有 src 这个文件夹,只有这个才是我们编译必须的。而且lua越做越精简了,5.1的版本里面还有一些test的例子之类的,5.2就只剩下必须的内容了。然后,如果是第一次编译lua,还是建议看一下doc文件夹下面的 readme.html。我就是通过那个才知道编译lua必备的文件的。...

weixin_36289742的博客 521

vue高德地图POI关键字搜索定位

最近在项目中遇到了关于地图的问题,首先为了满足需求从而使用的是JSAPI为2.0版本的。需求是根据关键字搜索定位到该位置。值得注意的是在使用 AMap.Event.addListener时 Event一定要大写的E,不然页面会报错。在地图上定义一个输入框,根据输入的位置进行提示,然后点击后跳转到对应的位置并打点标记。JSAPI主要使用这两个。

YL 2136

手把手教你学Simulink——基于AI融合与智能调度的场实例:强化学习在卫星资源分配中的应用

本文详细介绍了如何利用Simulink和强化学习技术实现智能卫星资源分配。文章首先分析了低轨卫星通信系统面临的动态资源调度挑战,提出采用强化学习(特别是PPO算法)的解决方案。接着逐步展示了完整的建模过程:从Simulink项目创建、卫星通信环境建模(用户业务、信道特性、资源池),到强化学习任务定义(状态空间、动作空间、奖励函数),再到PPO智能体的构建与训练。最后通过仿真验证,PPO智能体在系统吞吐量、公平性和阻塞率等关键指标上均优于传统方法。该方案为卫星通信系统的智能资源管理提供了可行方案,并支持进一步

MHD0815的博客 190

Lua学习笔记 VC6下编译Lua源码

Posted by PhiL Cheng     Category: Lua Lua5.1.3解释器源码下载地址:    http://www.lua.org/ftp/lua-5.1.3.tar.gz 用VC6编译Lua解释器方法: 1.新建一个win32控制台程序 2.将”src”文件夹下的所有文件(除”luac.c”)复制到当前工程目录下 3.分别添加上述复制的c

slj_win的专栏 1381

微信小程序 - 最新详细实现模板消息订阅通知功能,给用户微信发送“服务通知“模板消息并点击进入跳转到小程序页面路由,订阅消息通知详细后台申请流程及示例代码,解决授权申请弹框被拒绝后无法调起、常见报错!

微信小程序,vue2,vue3,模板消息,订阅通知,服务通知,小程序模板通知,订阅微信模板消息功能,唤起模板消息订阅弹框并发送服务通知,消息订阅与模板消息发送,一次性订阅,长期永久订阅,申请模板id,详细示例代码教程,配置流程,消息模板,模板ID,用户收不到消息,订阅了通知但微信不来服务通知,报错,小程序平台模板消息订阅功能,唤起订阅模板消息弹框,订阅模板消息发送服务通知功能,如何做模板消息订阅,一直收不到通知,用户通过弹窗订阅,订阅消息,无法打开申请授权弹框,用户拒绝/关闭后,如何引导用户再开启,拒绝后怎

🏆 前端领域优质创作者 5329

Code::Blocks

Code::Blocks 是一个开放源码的全功能的跨平台C/C++集成开发环境。 Code::Blocks是开放源码软件。Code::Blocks由纯粹的C++语言开发完成,它使用了著名的图形界面库wxWidgets(2.6.2 unicode)版。对于追求完美的C++程序员,再也不必忍受Eclipse的缓慢,再也不必忍受VS.NET的庞大和高昂的价格。 中文名编码:...

weixin_30731305的博客 430

SpringBoot整合JWT实战:从零构建无状态认证系统,详解Token生成、验证与安全最佳实践

JWT在SpringBoot中的实现与应用 摘要:本文介绍了JWT(JSON Web Token)的基本概念、与Session机制的对比,以及SpringBoot项目中JWT的整合实现。JWT由Header、Payload和Signature三部分组成,具有无状态、跨域支持等优势。文章详细展示了如何在SpringBoot项目中配置JWT环境,封装JWT工具类来实现Token的生成、解析和验证功能,包括密钥管理、自定义声明、签名验证等核心操作。通过对比表格和生活化比喻,帮助读者理解JWT与传统Session的

本博客聚焦 YOLOv11 全流程落地,涵盖架构优化、数据集处理、训练技巧与多场景部署,兼及国产数据库、Java 开发与 AI 模型应用,内容兼顾理论与工程实践,为开发者提供系统干货,助力高效提升技术能力。 1775

【踩坑记录】colmap中的相机位姿的坐标系定义及其可视化结果的隐含转换

1 坐标系定义及转换   首先介绍一下世界坐标系和相机坐标系之间的转换,它们之间是存在一个转换关系的。现假设空间中一点X,它在相机坐标系下的坐标是Xcamera,在世界坐标系下的坐标是Xworld。假设它通过R和t实现从相机坐标系到世界坐标系之间的转换: Xworld = RXcamera + t   那么,由上式,我们可以推得从世界坐标系向相机坐标系的转换关系(RT=R-1,所以通常直接使用RT即可): Xcamera = RTXworld - RTt   所以,两个坐标系之间的转换,需要看其具体

zeeq的博客 2万+

用VC编译lua源码,生成lua语言的解释器和编译器

用VC编译lua源码,生成lua语言的解释器和编译器 1.去网址下载源码http://www.lua.org/download.html2.装一个VC++,我用的是VC6.0 3.接下来我们开始编译源码,我们需要编译: 一个静态库 一个动态库 一个lua语言解释器 一个lua编译器 建立一个工静态库工程 打开VC-->文件-->(点击)新建--(弹出框中选...

weixin_34292924的博客 233

第一章 EB安装

1.DemoWorkspace 是基于EB当前组件配置下的例程,包含了启动文件和中断服务函数以及组件demo。2.Mclsar 下存放的是EB的插件包和静态MCAL的驱动文件。

舊梦的博客 1964

VC6.0中不同版本静态方式加载动态库的问题解决过程

背景:  公司软件使用了一家公司的SDK,针对不同的产品的时候,可能是这个第三方库兼容性的问题,存在使用其新设备的时候,只能用新的库;使用其老设备的时候,只能使用旧版的库,由于同一款软件有可能使用新设备,有可能使用旧设备,所以新旧库的问题需要解决,(有动态库A和动态库B两个dll,在新旧版本中都存在); 寻找解决方案过程:  1. 首先第一步,想更改旧版的库名称为xxx-old.dll(A动态库...

weixin_34202952的博客 189

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

windiws下编译luasql(lua5.3编译)

从github拿下 luasql 源码  https://github.com/keplerproject/luasql 里面有vc6工程,太久没有更新的我的vs无法打开工程。 我只编译了sqlite3的。mysql(其他)也是类似。 首先修改 Makefile.win.sqlite3 文件。 修改后打开vs命令行。 用 nmake /f Makefile.win.sqli

_Tucci 2366

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

在Windows下使用Visual Studio编译Lua5.3

Lua5.3已经发布好长时间了,可是因为LuaForWindows的Lua版本无法和官方保持一致,所以想尝试下编译Lua5.3的源代码,因为作为一名合格的程序员,是应该要懂得编译原理的相关内容的啊(可是我真的没有学过编译原理啊!…..)。好了,那么今天博主将在文章中和大家分享自己编译Lua5.3的过程,希望能够对大家学习和使用Lua有些帮助吧!我们知道Lua由三部分组成,即 * Lua链接库 *

素履独行 | 元培的个人博客 9514

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

lua支持中文--改法修正

看到网上各种转载修改源码使lua支持中文的,结果试了下发现测试出来有问题,如: >function 为而的() end stdin:1: '(' expected near ')' 这里就会报错,只好改下,就没问题了,如下改后的源码(改动之处已标明)。 #pragma once #include //////////////////////////

kugoo11v12的专栏 2633

vc++工程中添加lua代码调用-增加lua的源码到工程

三。src目录是我们需要的代码,将里面的lua.c和luac.c删除,这两个文件定义了一个入口函数,而在vs里面已经有了入口函数。 四。在vs里创建一个工程,选择consolewin程序,方便输出,这里不能选择预编译头文件,否则会报错。

sylalak123的博客 1770
上一篇: 关于 CComboBox::GetItemData返回值为0 的修正
下一篇: 内存像素值采用CreateBitmap显示不正常的解决方法
snakehacker
博客等级 码龄20年 36粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值