在python代码中处理C库中的对象。

问题描述 投票:0回答:1

我想从一个C++库中实现一个C++库。.dll 文件到一个Python脚本中,以控制一个叫做 ClipX by HBM 以防以后有人需要帮助)。

厂家给出了一个C实现的例子,和一个C++实现的例子。 在C例子中,Connect()函数返回一些指针,在后续的读写函数中使用。 在C++的例子中,使用了一个ClipX类来建立连接,读写函数是该类中的方法。 为了解决这个问题,我简化了代码。

基本上,我想 connect() 到设备上,并在以后的某个时间 read() 从它。 从我所读到的内容来看,似乎Cython是一个很好的方式来封装这个项目。connect()read() 作为单独的函数,并将它们作为一个模块导入到Python中。 我的问题是,对于C实现,我是否可以在连接后将MHandle指针传回Python,以便以后使用。

  1. 对于C语言的实现,我能否在连接后将MHandle指针传回Python,供以后使用(即调用读取函数)? 这个指针是否有任何意义,在以后的不同函数调用中使用?

  2. 对于C++的实现,是否可以将dev对象传给Python代码,以便以后传回给Python代码使用?Read()? 你能对任意的对象做到这一点吗?

我是一个机械工程师,如果这是胡言乱语或狂妄的信息,对不起。非常感谢任何指导。

C代码

/*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);
python c++ cython porting
1个回答
1
投票

如果你把C++函数声明为 "C++",那么它们就可以从C语言中调用。 extern "C". 这与 滥竽充数

Python解释器可以用C函数进行扩展。仔细阅读 扩展和嵌入Python解释器。 章。

小心C++的异常。你不希望它们穿越Python解释器代码。所以任何 extern "C" 从Python中调用的C++函数应该处理和捕捉 例外 内部例程提出的。

最后,要注意内存管理和垃圾收集。P.Wilson旧文中关于 Uniprocessor垃圾收集技术 是相关的,至少是术语和见解。或者阅读 GC手册. Python使用了一个 参考数 计划,并特别处理 参考资料少. 要小心 通告.

当然要注意 GIL 在Python中。大致说来,你不能让几个线程在没有防范措施的情况下做Python的事情。

序列化 的设备相关数据也是一个问题,但你可能不需要它。

最重要的是。守规矩.

诸如 双氧水 可以帮助 拉特克斯文件簿).

当然,使用足够好的 版本控制 系统。我建议 粪便. 也是一个好的 建立自动化 工具。

我的建议是将你的C++代码发布为 开源例如,关于 githubgitlab. 然后,你可以得到有用的 代码审查 和反馈。

如果你的硬件+软件系统是 危急,考虑 静态程序分析 技术,例如:与 Frama-CClang静态分析器 或用自己的 GCC插件. 再过几个月(2020年底),你可以尝试一下 俾斯蒙 (又读 本稿 报告)。)

我肯定是有偏见的,但我确实建议尝试一些。Linux发行版 (例如 乌班图蝶变)作为你的交叉开发平台。要知道,很多设备(包括 RaspBerryPi)正在运行一些 嵌入式Linux系统,所以学习努力是有意义的。那就读 高级Linux编程

© www.soinside.com 2019 - 2024. All rights reserved.