草庐IT

python - 用 ctypes 包装 C++ 库是个坏主意吗?

我在wrappingClibrary上通读了以下两个线程和C++library,我不确定我是否明白了。我正在使用的C++库确实使用了类和模板,但没有以任何过于复杂的方式使用。用ctypes包装它有什么问题或注意事项(除了你可以在纯python等中这样做)?PyCXX、Cython和boost::python是人们提到的其他三个选择,是否有共识哪个更适合C++?谢谢奥利弗 最佳答案 为boost::python辩护,鉴于亚历山大对ctypes的回答:Boostpython在c++和python代码之间提供了一个非常“c++”接口(in

python - 静态库的ctypes?

我正在尝试为poker-eval编写一个Python包装器,一个c静态库。我在ctypes上可以找到的所有文档都表明它适用于共享/动态库。是否有用于静态库的ctypes?我知道cython,但我应该使用它还是将poker-eval重新编译到动态库中以便我可以使用ctypes?谢谢,迈克 最佳答案 选择完全取决于您。如果您有能力将库重新编译为共享对象,我建议您这样做,因为它会最大限度地减少您必须维护的非Python代码。否则,您将需要构建一个链接到静态库并包装它公开的函数的python扩展模块。您提到了Cython;如果你走那条路,这

python - 如何将 malloc 和 free 与 python ctypes 一起使用?

我的C库中有一个函数,比如runsim(),它将指向structrepdata的指针作为参数之一,其中structrepdata由给出structrepdata{int*var1;int*var2;int*var3;char*var4;double*var5;double*var6;int*var7;};当专门使用C时,我初始化一个类型为structrepdata的变量来调用该函数,structrepdatadata;voidcreate_data_container(structrepdata*data,intlen_data){data->var1=malloc(sizeof(in

python - 使用 ctypes 获取 `time_t` 的类型/大小

我正在使用python访问一个包含一些time_t字段的C结构ctypes模块。鉴于其不完全可移植的特性,我无法将这些字段静态定义为c_int或c_long类型。如何定义它们以使我的代码可移植?示例C结构定义:#import#importtypedefstructmy_struct{time_ttimestap;uint16_tcode;};各自的pythonctypes结构:fromctypesimport*c_time=?#WhatdoIhavetoputhere?classMyStruct(Structure):_fields_=[('timestamp',c_time),('c

python - Windows错误 : [Error 126] when loading a DLL with ctypes

这在带有Python2.7的Windows7上运行良好:lib=ctypes.cdll.LoadLibrary('prov_means')provmeans=lib.provmeans库prov_means.DLL在我的工作目录中。它导出一个简单、独立的C函数provmeans(),没有任何依赖性。当我在WindowsXP和Python2.7上尝试同样的事情时,我得到了Traceback(mostrecentcalllast):File"D:\python\Auxil\src\auxil.py",line130,inlib=ctypes.cdll.LoadLibrary('prov_m

python - ctypes.pointer、ctypes.POINTER 和 ctypes.byref 之间有什么区别?

在ctypes中,pointer和byref有什么区别?它们似乎都是将指针传递给函数的一种方式,例如作为输出参数。 最佳答案 在功能上,它们是等价的。然而,pythondocs请指出pointerdoesalotmoreworksinceitconstructsarealpointerobject,soitisfastertousebyrefifyoudon'tneedthepointerobjectinPythonitself. 关于python-ctypes.pointer、ctyp

ctypes使用浅谈

什么是ctypes:  ctypes 是Python的一个标准库,用于与C语言进行交互。它提供了一组工具和函数,可以方便地调用动态链接库(DLL)或共享对象(SO)中的C函数,并处理C数据类型的转换。说的易懂点就是ctypes在c与python之间做类型转换的。既然是做类型转换的,那么对于c/c++中常用的类型,是如何用ctypes方式去做转换的,接下来一探究竟:什么是动态链接库:  动态链接库是一个已经编译好、程序在运行时就可直接使用的数据-函数库。与静态链接库不同,动态链接库在程序运行时被加载和链接,而不是在编译时动态链接库必须先载入,为此ctypes提供三个对象:cdll、windll(

c# - C#'s equivalent to VB.NET' s 直播

C#是否具有与VB.NET的DirectCast等效的功能?我知道它有()强制转换和“as”关键字,但这些与CType和TryCast一致。明确地说,这些关键字执行以下操作;CType/()转换:如果它已经是正确的类型,则转换它,否则寻找类型转换器并调用它。如果未找到类型转换器,则抛出InvalidCastException。TryCast/“as”关键字:如果类型正确,则强制转换,否则返回null。DirectCast:如果类型正确,则进行转换,否则抛出InvalidCastException。在我说完上面的内容之后,有些人仍然回答说()是等价的,所以我将进一步说明为什么这不是真的。

c# - C#'s equivalent to VB.NET' s 直播

C#是否具有与VB.NET的DirectCast等效的功能?我知道它有()强制转换和“as”关键字,但这些与CType和TryCast一致。明确地说,这些关键字执行以下操作;CType/()转换:如果它已经是正确的类型,则转换它,否则寻找类型转换器并调用它。如果未找到类型转换器,则抛出InvalidCastException。TryCast/“as”关键字:如果类型正确,则强制转换,否则返回null。DirectCast:如果类型正确,则进行转换,否则抛出InvalidCastException。在我说完上面的内容之后,有些人仍然回答说()是等价的,所以我将进一步说明为什么这不是真的。

NO module named ‘_ctypes‘报错解决方法

pip3installflask报错信息如下:根据经验不能无脑直接最后一行去搜Commanderroredoutwithexitstatus1:pythonsetup.pyegg_infoCheckthelogsforfullcommandoutput. 从这里开始看,可以看出缺少_ctypes这个库原因centos7系统中没有安装外部(libffi)的开发链接库软件包,所以在pip安装的时候报错如下ModuleNotFoundError:Nomodulenamed'_ctypes'解决方法:安装外部函数库(libffi-devel)[root@bogonpython3.8]#yuminsta