- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
我用 C 编写了一个小程序来管理 SQLite3 中的书目数据库。到目前为止,这只是一个允许导入和导出 BibTeX 数据的命令行工具。为了使导出/导入功能更加可定制(例如,在导入时始终在日期字段中组合年和月字段,或在导出时跳过某些字段)这些函数是用 Lua 编写的,并从 C 调用。现在我希望 Lua 成为一个可选的依赖。这样做的好方法是什么? 即如果在编译时未找到 Lua,则退回到更基本的导入/导出功能。
现在,例如导出时,我从 SQL (sqlite3_exec) 获取数据并将其直接写入回调函数中的 Lua 表,就像这样(剥离的 stackoverflow-handling ;-)):
int db_meta_cb(void *udata, int n, char **cval, char **ckey) {
while (n-- > 0) {
lua_pushstring(L, cval[n]);
lua_setfield(L, -2, ckey[n]);
};
};
然后有一个 Lua 函数将这样一个表作为参数并漂亮地打印一个 BibTeX 条目。关于导入的类似故事:BibTeX 解析器(Lex/YACC 生成的 C 代码)编写一个 Lua 表并调用“清理”Lua 函数,然后从同一个 Lua 表中读取结果并将其插入数据库。
从我过度使用 Lua 的角度来看,这感觉不对,我猜是因为数据由(键,值)对组成。
请注意,此项目的一个原因是尝试/学习如何将 Lua 嵌入 C 中,因此请不要建议 (a) 使用可用的引用书目管理器之一,或 (b) 完全用 Python 或 Lua 重写所有内容...(顺便说一句,我已经做过了)
最佳答案
我见过解决这个问题的最优雅的方法是通过 dynamic loading .不要在运行时将程序与 lua 链接,而是尝试使用 dlopen
系列函数手动加载库。
如果此操作失败,您可以设置一个全局标志,您将需要求助于提供功能的其他方法,但如果成功,请使用 dlsym
函数从 lua 中获取函数共享对象并使用它们。您可以生成一个非常优雅的解决方案,其中您使用 lua 或遗留版本填充一些函数指针,然后您可以简单地做出一次决定并调用函数而不关心正在使用哪个实现。
关于c - 解开 Lua 和 C 代码以使 Lua 依赖项成为可选的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24637808/
是否可以在 Delphi 中解开这些名称?如果是这样,我从哪里可以获得更多信息? 在 dbrtl100.bpl 中找不到特定条目的错误消息示例我想知道它找不到哪个确切的函数(单元、类、名称、参数等)。
我是小白,如何从列表中删除引号和逗号?或者我如何“取消字符串”? 在不显示字典 (dic) 的情况下,我使用的代码如下所示: >>>import itertools >>>list(itertools
我正在学习构建器模式,到目前为止我了解到,它是用于初始化的常用模式的一个很好的替代方案: 伸缩构造函数模式 JavaBean 模式 问题是,我真的不喜欢从我的域模型中的对象中删除 getter 和 s
我有这段文字 "Welcome to my city. Hello my good friend" 使用 jQuery(或 javascript),我想解开所有 span 标签,只保留第一级,我的意思
在为大学撰写作业的过程中,我一直享受着学习新的 Haskell monad 的乐趣。耶!!! 我有一个可以很好地进行类型检查的函数: compile :: Prog -> State VarsStat
let myLabel:UILabel = UILabel(frame:CGRectMake(0, 0, 44, 44)) myLabel.text = "Primary"
是否有一个好的 npm 包可以删除在 NodeJS 服务器上运行的 html 字符串中不必要的嵌套标签(无浏览器 DOM)?我尝试过 sanitize-html,但似乎不可能做到这一点。 我收到用户发
我目前正在编写一些日志代码,这些代码应该——除其他外——打印有关调用函数的信息。这应该比较容易,标准C++有一个type_info类(class)。这包含 typeid 的类/函数/等的名称。但它被破
我有以下组件 const ListItem = ({ children, title = '' }) => { const [isActive, setIsActive] = useSta
我正在尝试取消在 python3 中 pickle 的对象。这在 python3 中有效,但在 python2 中无效。该问题可以重现到 pickle 协议(protocol) 0。示例代码: imp
这个问题的灵感来自 How to transform a flow chart into an implementation?它询问从代码中通过算法消除 goto 语句的方法。 answer this
当我的 child 执行 unwind segue 时,我的 Controller 的 viewDidAppear 被调用。 在这个方法中(只有这个方法,我需要知道它是否来自 unwind) 注意:
我用 C 编写了一个小程序来管理 SQLite3 中的书目数据库。到目前为止,这只是一个允许导入和导出 BibTeX 数据的命令行工具。为了使导出/导入功能更加可定制(例如,在导入时始终在日期字段中组
这个问题与How to split an array according to a condition in numpy?密切相关但我正在寻找一种更通用的方法来拆分给定未知数量索引的数组: impor
我是一名优秀的程序员,十分优秀!