问题标签 [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.

0 投票
0 回答
87 浏览

c++ - “operator shared_ptr”方法访问?(自由感)

我目前正在尝试将LibRealsense包装到 Unreal 4 插件中。这个库提供了一些 C API 和一些 C++ API(包装它的 C API),所以我正在做 C++(这对 Unreal 来说很有意义)。

但是有一种我以前从未见过的运算符重载(在rs_pipeline.hpp中):

rs2_pipeline是管道的 C 类型,它在所有 c++ 类中作为共享指针访问。例如:

因此,当我尝试config.can_resolve使用我的 C++“管道”对象调用时,我需要获取内部的shared_ptr<rs_pipline>. 但是我该怎么打电话operator shared_ptr<rs_pipline()??它到底是一个什么样的算子?

0 投票
0 回答
89 浏览

tensorflow - TF_SessionRun 中的内存重新分配

我正在使用带有 C 接口的 TensorFlow。TF_SessionRun 函数的文档指出:“成功时,对应于输出[0,noutputs-1] 的张量被放置在 output_values[] 中。output_values[] 元素的所有权转移给调用者,调用者最终必须在它们上调用 TF_DeleteTensor 。”

我正在大量使用 TF_SessionRun,我想尽量减少内存重新分配的数量。但是这个描述并没有说明内存重新分配的规则。如果输出 TF_Tensor 已经分配了适当的维度,它会被重新分配还是按原样使用?这种行为将来会改变吗?

0 投票
1 回答
406 浏览

c++ - 使用 lua coroutine api 和 lua_close 时出现分段错误

我正在开发一个 lua 脚本中断项目,我想使用 std::Stack 和 lua 协程来保存上下文。但是当我将 stacksize 设置为超过 38 时,它会在 lua_resume 和 lua_close 中随机崩溃。测试.lua:

主.cpp:

编译器选项:

我怀疑是我调用lua_newthread时出错了,所以我在调用lua_newstate之前做了一个堆栈检查,它变得正常了。

想知道我是否在这方面犯了错误,我该如何改正?

0 投票
0 回答
118 浏览

python-3.x - Python 3 c 扩展模块释放无效指针

我编写了这个C 扩展模块,它使用快速矩阵乘法计算斐波那契数。

问题是当我使用该模块运行以下 Python 3 代码时:

它返回下面列出的错误:

free():无效指针已中止(核心转储)

它似乎是由 C 扩展模块内部的某些东西引起的,但没有显式free调用。

0 投票
2 回答
66 浏览

lotus-domino - 如何从 TYPE_MIME_PART 项目中读取数据?

它有点工作,但问题是 MIME_PART 结构似乎没有初始化?即使我尝试打开不同的 mime 项目,它的所有属性都具有相同的值。

itemText 字符串具有大部分内容,但由于未正确设置 MIME_PART 结构,因此指向文本的指针已关闭...

那么如何正确设置 MIME_PART 呢?

0 投票
1 回答
1305 浏览

python - numpy C API 中的 import_array 如何工作?

我正在尝试将 c++ 中的 c 样式数组转换为 numpy 数组,并在尝试使用“PyArray_SimpleNewFromData”函数时遇到问题。原来我需要打电话

虽然我不明白如何调用这个函数。每当我尝试调用它时,我都会遇到我无法理解的编译器错误。例如编写以下简单脚本:

产生编译器错误

错误:没有值的返回语句,在返回'int'的函数中 [-fpermissive] import_array();

我看了几个例子,例如:

Numpy C-Api 示例给出了 SegFault

PyArray_SimpleNewFromData 示例

https://codereview.stackexchange.com/questions/92266/sending-ac-array-to-python-numpy-and-back

编译多个模块时 import_array() 的 Numpy/CAPI 错误

但是无论我尝试什么(即使看似遵循这些示例),我似乎都遇到了上面的编译器错误。我错过了什么或做错了什么?非常欢迎解释如何调用 import_array() 函数。谢谢您的帮助!

更新:

我正在使用 python 2.7.11,我认为它可能与这里讨论的内容有关:

https://github.com/clemenscorny/brisk/issues/3

但我仍然不知道如何解决它。

0 投票
1 回答
2552 浏览

python - 在 Python 模块中调用 C 头文件函数

我需要将 cfgmgr32 api header(cfgmgr.h) 从 C 转换为 python 模块。这样我就可以从其他 python 脚本调用任何 C 头函数

0 投票
1 回答
42 浏览

c-api - 更新 aTable 集合 a,b,c = func(x,y,z,…)

我需要一个快速的建议。我提到以下场景是基于我在 64 位上的 monetdblite 编译中已经可用的 c_api 的使用,目的是将它与一些即席 C 编写的函数一起使用。

简短:如何实现或模拟以下场景: 更新 aTable set a,b,c = func(x,y,z,...)

长。许多算法返回多个变量,例如多元回归。

为了尽量减少monetdb和繁重计算函数之间的数据传输,所有这些结果都是一步生成的。问题是如何立即将它们传回,从而最大限度地减少 monetdb 和外部 C/C++(/R/Python) 函数之间的计算时间和内存流量?


我解决这个问题的第一个想法是这样的:

1.更新aTable set dummy = func_compute(x,y,z,...)

其中 dummy 是一个临时的 __int64 字段,func_compute 将计算所有必要的输出并将结果存储到一个虚拟指针中。为了确保常量估计没有问题,数组中的第一个返回值将是真正的虚拟指针,其余的只是一个递增的 dummy + i 值;

2.更新aTable set a = func_ret(dummy, 1), b= func_ret (dummy, 2), c= func_ret (dummy, 3) [, dummy=func_free(dummy)];

假设 func_ret 将以与第一次调用时返回的顺序相同的顺序获取虚拟对象,我只需将准备好的结果复制到提供的存储中;如果订单没有保留,我将需要一个额外的步骤来获取最小值(真正的虚拟指针),然后使用当前值的偏移量在我的数组中查找。

// 或者 =============================

我将如何释放临时内存不太相关,可以在更新的最后一个语句中,也可以在使用 func_free 的新假更新语句中。问题是在我看来,即使我节省了一些计算(大)时间,假人的传递仍然完成了 3 次(内存实际上没有被复制的任何机会?)。

有没有其他更好的方法来实现这一目标?

0 投票
1 回答
882 浏览

c++ - 在 C 中重塑张量

如何使用 Tensorflow 的 C_api 重塑 TF_Tensor*,因为它是在 C++ 中完成的?

我没有看到使用 tensorflow 的 c_api 的类似方法。

0 投票
2 回答
813 浏览

swift - Swift 桥接 2D 数组以键入 UnsafePointer?>?

嗨我正在尝试使用 Swift 4 包装一个 C api

Swift 已导入具有以下签名的函数。

public typealias indicator = @convention(c) (Int32, UnsafePointer<UnsafePointer<Double>?>?, UnsafePointer<Double>?, UnsafePointer<UnsafeMutablePointer<Double>?>?) -> Int32

根据 C 库文档,签名如下:

int indicator(int size, double const *const *inputs, double const *options, double *const *outputs);

值得注意的是,函数的int返回是c风格的函数的错误类型,实际返回在outputs指针中

那么假设我创建了以下 Swift 类型

let inputs: [[Double]] = [] let options: [Double] = [] var outputs: [[Double]] = []

使用一些适当的值,那么我应该能够执行以下操作:(注意info.pointee.indicator是导入的函数)

但是编译器抱怨以下错误:

当我传递了不正确的类型(我认为)时,这种方式是有道理的。

那么除了内存管理问题之外,我将如何将[[Double]]类型转换为例如UnsafePointer<UnsafeMutablePointer<Double>>指针?

根据此处的文档Calling Functions With Pointer Parameters我应该能够通过隐式桥接来做到这一点,但似乎不是,也许我应该只创建指针类型而不是尝试从 Swift 转换?

在此先感谢,我确定我缺少一些简单的东西。

C API 本身如下:

indicator函数通过上面的结构访问。

指标函数的给定实例如下