用python代码处理C库中的对象 < >我想从一个代码> .dll < /c>文件中实现一个C/C++库,以控制一个I/O设备(如果将来有人需要帮助),控制一个I/O设备。 制造商给出了一个C实现实例,并给出了一个C++实现实例。在C示例中,Connect()函数返回一些指针,用于后续的读/写函数。在C++示例中,使用clipx类来建立连接,读写函数是该类中的方法。为了解决这个问题,我简化了代码
基本上,我想用python代码处理C库中的对象 < >我想从一个代码> .dll < /c>文件中实现一个C/C++库,以控制一个I/O设备(如果将来有人需要帮助),控制一个I/O设备。 制造商给出了一个C实现实例,并给出了一个C++实现实例。在C示例中,Connect()函数返回一些指针,用于后续的读/写函数。在C++示例中,使用clipx类来建立连接,读写函数是该类中的方法。为了解决这个问题,我简化了代码,python,c++,cython,porting,Python,C++,Cython,Porting,基本上,我想connect()到设备,然后在以后的某个时间read()从设备上读取。从我所读到的内容来看,Cython似乎是一种将connect()和read()包装为单独函数并将它们作为模块导入Python的好方法。我的问题是: 对于C实现,我是否能够在连接之后将MHandle指针传递回Python,以供以后使用(即调用read函数)?指针是否有任何意义,稍后在不同的函数调用中使用 < > > C++实现时,DEV对象是否可以传递到Python代码,以便以后返回到读()/?你能用任意对象来做吗
connect()
到设备,然后在以后的某个时间read()
从设备上读取。从我所读到的内容来看,Cython似乎是一种将connect()
和read()
包装为单独函数并将它们作为模块导入Python的好方法。我的问题是:
/*From .h file*/
----------------------------------------------------
struct sClipX {
void *obj;
};
typedef struct sClipX * MHandle;
ClipX_API MHandle __stdcall Connect(const char *);
----------------------------------------------------
/*End .h file*/
int main()
{
const char * IP = "172.21.104.76";
MHandle m=Connect(IP);
Read(m, 0x4428);
}
C++代码:
int main(){
ClipX dev = ClipX();
dev.Connect("172.21.104.76");
dev.Read(0x4428);
如果将C++函数声明为
extern“C”
,则可以从C调用它们。这与
Python解释器可以用C函数进行扩展。仔细阅读这一章
请注意C++异常。您不希望它们跨越Python解释器代码。因此,任何从Python调用的<代码>外部“C”< /C> C++函数,都应该处理和捕获内部例程。
最后,要注意内存管理和垃圾收集。威尔逊的旧论文是相关的,至少在术语和见解方面是相关的。或者读报纸。Python使用一个方案,并专门处理。小心
当然要注意Python中的错误。粗略地说,在没有预防措施的情况下,不能让多个线程执行Python操作
设备相关数据的丢失也是一个问题,但您可能不需要它
最重要的是,记录好您的代码
像这样的工具可能会有所帮助(可能是使用或)
当然要使用足够好的系统。我推荐。也是一个很好的工具
P>我的建议是发布您的C++代码,例如ON或OR。然后你可以得到有用的信息和反馈
如果你的硬件+软件系统是,考虑技术,例如用或你自己的。几个月后(2020年底),您可能会尝试(也可以阅读报告)
我当然有偏见,但我确实建议尝试一些(例如or)作为您的交叉开发平台。请注意,许多设备(包括)正在运行一些,因此学习工作是有意义的。然后阅读您应该尝试python C外部函数接口。请提供您正在破解的设备的URL。请不要评论您的问题,但请务必这样做。我现在已经添加了它。谢谢您的详细回复和参考!我肯定会研究它们。我真的建议尝试Linux发行版。您可以给我发电子邮件到
basile@starynkevitch.net
获取更多帮助,但请在电子邮件中提及您的问题的URL