Tag: 包装器

C生成唯一ID

我正在创建一个C包装器,可以读取存储在文本文件中的数据结构类型。 接口应该是我可以生成映射到唯一数据结构的唯一ID,并通过唯一ID修改包装函数。 问题是我需要能够生成一个唯一的id来映射。 我想不使用任何外部库。 没有任何大的开销有没有办法做到这一点?

如何使用C ++ Mat类ptr对象的基本C包装器打印Mat元素

我正在为一些OpenCV C ++代码编写一个C包装器,我有2个函数用于创建Mat对象并分别将数据设置为cv_create_Mat_type和cv_Mat_ptr_index。 function是他们需要的,我无法改变它们,因为我正在与某人合作完成项目的一部分。 我的问题是如何打印cv_Mat_ptr_index填充的矩阵,因为它填充了for循环内部。 cv_Mat_ptr_index上的返回是一个uchar *我尝试解除引用但是我需要知道如何获取cv_Mat_ptr_index(uchar *)返回内部的数据,因为我确定,如果我错了就纠正我,那就是它包含当前从以下代码中的数据数组分配到矩阵mat中的元素。 提前感谢任何参与者。 #include “opencv2/highgui/highgui.hpp” #include “opencv2/highgui/highgui_c.h” #include using namespace cv; using namespace std; uchar* cv_Mat_ptr_index(Mat* self, int i) { return self->ptr(i); } Mat* cv_create_Mat_typed(int rows, int cols, int type) { return new Mat(rows, cols, type); } int main( ) { float data[4][2] = { {501, 10}, {255, 10}, […]

为包含void *参数的函数创建SWIG C#包装器

我正在尝试为包含函数的C .lib创建一个C#包装器,使用SWIG获取一个void指针。 int inputPointExample(void* input); int outputPointerExample(void* output); 默认情况下,SWIG不处理void指针转换,您必须以某种方式使用类型映射。 我找到了这个页面 – > http://www.nickdarnell.com/2011/05/swig-and-a-miss/ Number 9表示使用以下类型映射来处理void指针… %typemap(ctype) void * “void *” %typemap(imtype) void * “IntPtr” %typemap(cstype) void * “IntPtr” %typemap(csin) void * “$csinput” %typemap(in) void * %{ $1 = $input; %} %typemap(out) void * %{ $result = $1; %} %typemap(csout) void * { return $imcall; } […]

如何编译C函数使用LAPACK库的C扩展?

我为Python编写了一个C extesion,并且该模块在.so文件中成功编译。 但是,当我尝试在Python端使用包装的C函数(python中的一个测试代码调用包装的C函数)时,我得到以下ImportError ImportError: /home/username/newModule.cpython-36m-x86_64-linux-gnu.so: undefined symbol: dgetri_ 我很确定导入错误中的undefined symbol: dgetri_是因为生成的.so文件找不到LAPACK库的链接。 所以我的问题如下, 当包装的C函数依赖于LAPACK库来生成.so格式的模块时,如何为python编译c扩展代码? 目前我正在使用python的utils.core模块编译C代码。 我想我需要从命令行编译C代码来链接LAPACK但是不知道哪些是适当的命令? 任何帮助表示赞赏。

将c ++ lambda传递给旧的c函数指针

我必须为旧的c库创建一个c ++包装器。 在类方法中,我必须调用ac函数,它接受其他东西也是函数指针(它是一个事件处理程序,该函数接受一个事件发生时触发的函数)。 一个简单的例子是: void myclass::add_handler(std::function handler, otherstuff…) { /* * Many things. */ type_of_function_pointer_accepted_by_old_c_library_add_handler nameofvariable = [handler](same_arguments_as_in_definition_of_the_old_c_function_pointer_accepted) { /* * Many other things with other stuff to be done before the * handler but always only when fired and not when myclass::add_handler is called. */ handler(); }; old_c_library_add_handler(nameofvariable); /* * Last things. */ } […]

从C调用Swift的最佳方法是什么?

从Swift调用C非常简单,但是我正在研究在C中制作双向包装器,所以我的C必须调用Swift函数。 现在,我可以通过在C中声明函数指针来实现这一点,并且在Swift端将它们设置为在Swift中调用代码之后让我的C函数调用它们。 我的C头文件: typedef void (*callback_t)(void); void callBackIntoSwift( callback_t cb ); 我的C实现文件: #include “stuff.h” #include void callBackIntoSwift( callback_t cb ) { printf( “Will call back into Swift\n” ); cb(); printf( “Did call back into Swift\n” ); } 在桥接头中包含我的C头文件后,我可以在Swift端执行以下操作: let cb: callback_t = { someKindOfSwiftFunction() } callBackIntoSwift( cb ) 甚至: callBackIntoSwift { someKindOfSwiftFunction() } 有没有更好的方法来做到这一点,不需要函数指针和回调? 我想让C端直接调用someKindOfSwiftFunction […]

如何在C ++ / CLI中包装C库回调

给定以下C库以及要求设置缓冲区的回调事件,如何以类型安全的方式编写适当的C ++ / CLI包装器? // The callback signature typedef void (__cdecl *BUFFERALLOCATOR)(void *opaque, void **buffer); // A struct that contains the context of the library struct lib_context_base_s { // The stored callback function pointer BUFFERALLOCATOR buffer_allocator; // Opaque pointer that contain the local context. Needed in C because // C doesn’t have closures (functions that […]

你如何为inheritance的c ++类编写ac包装器

我只是想知道是否有办法为具有inheritance的c ++类创建ac包装器API。 考虑以下: class sampleClass1 : public sampleClass{ public: int get() { return this.data *2; }; void set(int data); } class sampleClass : public sample{ public: int get() { return this.data; } void set(int data) {this.data = data; } } class sample { public: virtual int get(); virtual void set(int data); private: int data; } […]

C包装器C ++:如何处理C ++模板?

之前有人要求为c ++类编写ac包装器( C Wrapper for C ++ ),这基本上是清楚的。 还有一个问题:我如何处理c ++模板? 让我们说这是我的class级: template class Temp { T get(); void set(T t); } 是否有一种优雅的方式来编写交流包装?

是否有任何LAME c ++ wraper \ simplifier(在Linux Mac上工作,从纯代码中获胜)?

所以我想创建简单的pcm到mp3 C ++项目。 我希望它使用LAME。 我喜欢LAME,但它真的是biiig。 所以我需要某种OpenSource,使用纯粹的代码和纯粹的蹩脚代码工作流简化器。 所以说我用PCM和DEST文件给它文件。 打电话给像 LameSimple.ToMP3(file with PCM, File with MP3 , 44100, 16, MP3, VBR); 矿石这样的东西在4-5行(应该存在的例子)和我有我需要的vhat应该是轻,简单,powerfool,opensource,crossplatform。 有这样的事吗?!?