问题标签 [c-api]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
language-agnostic - 元语言以独立于语言的方式为“C-API”描述类型
是否有一种元语言来描述可以提供给工具的类型(结构/记录、函数类型及其参数......)和常量,或者我可以编写代码来为多种目标语言创建原型?注意:(E)BNF 甚至与我正在寻找的东西都不接近。
IDL 看起来更接近我的需要,但我看到的那些风格甚至没有涵盖不是面向对象的系统。Microsoft 的 M 似乎与 .NET 相关联,而我需要它的系统确实是人们通常所说的“C-API”。没有花哨的接口定义或任何远程面向对象的东西。
api - MATLAB C API:mxDestroyArray(NULL) 有什么作用?
我使用 MATLAB 的mxDestroyArray()
函数,想知道如何进行正确的错误处理。
如果我打电话mxCreate*Array()
或类似,我会得到一个关于成功和NULL
失败的有效指针,即如果内存已满。
如果我以这种方式创建了几个数组并且至少有一个失败了,我想释放所有我不再需要的东西。
在这里我想知道:我是否需要明确检查每个值?
或者我可以省略支票吗?
c++ - 跨 C API 边界传递异常
我正在用 C++ 编写一个使用旧 C API 的库。我的库的客户端可以指定回调函数,这些回调函数是通过我的库间接调用的,而我的库是通过 C API 调用的。这意味着必须处理客户端回调中的所有异常。
我的问题是:如何在边界的一侧捕获异常并在重新跨越 C API 边界并且执行回到 C++ 领域后重新抛出它,以便客户端代码可以处理异常?
c - DBus 同步调用超时
我有一个 DBus 服务器,它公开了一个需要很长时间才能完成的方法(大约 3 分钟)。客户端对此方法执行同步调用。
问题是,恰好在 25 秒后,客户端会因为“没有收到回复”而引发错误。
不幸的是,我无法更改客户端,因此我无法按照应有的方式进行异步调用。
我试图在我的服务器配置中使用这一行:
但情况并没有改变。
任何想法?
ios - 如何使用 C API 测量内存中 SQLite 数据库的大小?
我正在对 iOS 中的内存中 SQLite db 进行压力测试。
过了一会儿,OCUnit 触发了这个错误。
我认为这是达到内存限制。但我无法弄清楚我当前的数据库大小。我试过了,
但这总是返回0
for ,并且对于所有相同的更新都有current
一些值。peak
我阅读了手动输入,但它看起来不像 db size 功能。我想我挖错地方了。如何使用 C-API 获取数据库大小?
multithreading - SQLite:跨线程共享连接以进行读写
我有一个使用 SQLite(3.7.2 版)存储数据的应用程序。我在从同一个 SQLite 数据库写入和读取的多个线程之间共享一个 SQLite 连接。SQLite 使用 DSQLITE_THREADSAFE=1 编译,这意味着 SQLite 处于序列化模式。
序列化:在序列化模式下,SQLite 可以不受限制地被多个线程安全使用。
相反,SQLite Wiki条目说
不要在多个线程中同时使用同一个数据库连接
我尝试了一个示例应用程序,它产生数百个线程并共享一个 SQLite 句柄来读取和写入,它工作正常。
那么 SQLite wiki 条目是否已过时,或者 SQLite 可能无法使用同一连接同时处理来自不同线程的读取和写入?
linux - Berkeley DB:由于先前在 c api 调用期间异常退出而卡在 futex_wait
我正在用 C 语言编程,在内核 2.6.18-238_xen_AMD64 的 RHEL5.6 上使用 berkeley db 4.3 (/usr/lib64/libdb-4.3.so)。
在我的测试中(写入 1,000,000 个键/值对),如果一个进程异常退出(ctrl + c、kill 或 assert 失败),而对 db 的操作正在进行中,则该 db 上的后续操作将在打开时被阻止。Strace 显示进程在打开 __db.00x(eg __db.001, __db.002, __db.003) 文件后停留在 futex(ptr_to_something, FUTEX_WAIT, 2, NULL) 调用。
我知道清除锁定的唯一方法是删除 __db.00x 文件,以下测试表明数据库没有损坏。它符合我的要求,但我只是想知道是否有更好(或更优雅)的方法来解决这个问题。
在这里,我列出了一些 strace stderr 和操作数据库的代码,这可能会有所帮助。
一些 strace 标准错误
操作数据库的代码
python - 具有递归的 Python C API - 段错误
我在 C++ 中使用 python 的 C API (2.7) 将 python 树结构转换为 C++ 树。代码如下:
python 树被递归地实现为具有子列表的类。叶节点只是原始整数(不是类实例)
我加载一个模块并从 C++ 调用一个 python 方法,使用来自here的代码,它返回树的一个实例,python_tree,作为 C++ 中的 PyObject。
递归遍历得到的PyObject。要获得孩子的名单,我这样做:
/li>
非常简单,它可以工作,直到我最终在调用 PyObject_GetAttr 时遇到分段错误(Objects/object.c:1193,但我看不到 API 代码)。它似乎发生在访问树的最后一个叶子节点时。
我很难确定问题所在。使用 C API 进行递归是否有任何特殊注意事项?我不确定我是否需要使用 Py_INCREF/Py_DECREF,或者使用这些函数或其他东西。老实说,我并不完全理解 API 的工作原理。任何帮助深表感谢!
编辑:一些最小的代码:
c++ - 为什么 PyObject_Print 会崩溃?
我一直在使用 Python 3.3 C-API 来查看是否可以在计划中的即将进行的项目中使用它,但几乎立即遇到了问题。
甚至用 0xc0000005 作为返回来编写这个简单的崩溃:
测试显示 PyObject_Print 正在产生崩溃。这段代码和/或我的设置有什么问题?
python - Python C_API:如何定义嵌套类?
我目前正在使用“原始”C-API 为 python 编写一个 C 扩展模块。我希望能够像下面的python代码一样定义“嵌套类”
如何使用 C-API 创建一个像 AB 这样的嵌套类?