我想从一个C++库中实现一个C++库。.dll
文件到一个Python脚本中,以控制一个叫做 ClipX by HBM 以防以后有人需要帮助)。
厂家给出了一个C实现的例子,和一个C++实现的例子。 在C例子中,Connect()函数返回一些指针,在后续的读写函数中使用。 在C++的例子中,使用了一个ClipX类来建立连接,读写函数是该类中的方法。 为了解决这个问题,我简化了代码。
基本上,我想 connect()
到设备上,并在以后的某个时间 read()
从它。 从我所读到的内容来看,似乎Cython是一个很好的方式来封装这个项目。connect()
和 read()
作为单独的函数,并将它们作为一个模块导入到Python中。 我的问题是,对于C实现,我是否可以在连接后将MHandle指针传回Python,以便以后使用。
对于C语言的实现,我能否在连接后将MHandle指针传回Python,供以后使用(即调用读取函数)? 这个指针是否有任何意义,在以后的不同函数调用中使用?
对于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);
如果你把C++函数声明为 "C++",那么它们就可以从C语言中调用。 extern "C"
. 这与 滥竽充数
Python解释器可以用C函数进行扩展。仔细阅读 扩展和嵌入Python解释器。 章。
小心C++的异常。你不希望它们穿越Python解释器代码。所以任何 extern "C"
从Python中调用的C++函数应该处理和捕捉 例外 内部例程提出的。
最后,要注意内存管理和垃圾收集。P.Wilson旧文中关于 Uniprocessor垃圾收集技术 是相关的,至少是术语和见解。或者阅读 GC手册. Python使用了一个 参考数 计划,并特别处理 参考资料少. 要小心 通告.
当然要注意 GIL 在Python中。大致说来,你不能让几个线程在没有防范措施的情况下做Python的事情。
序列化 的设备相关数据也是一个问题,但你可能不需要它。
最重要的是。守规矩.
当然,使用足够好的 版本控制 系统。我建议 粪便. 也是一个好的 建立自动化 工具。
我的建议是将你的C++代码发布为 开源例如,关于 github 或 gitlab. 然后,你可以得到有用的 代码审查 和反馈。
如果你的硬件+软件系统是 危急,考虑 静态程序分析 技术,例如:与 Frama-C 或 Clang静态分析器 或用自己的 GCC插件. 再过几个月(2020年底),你可以尝试一下 俾斯蒙 (又读 本稿 报告)。)
我肯定是有偏见的,但我确实建议尝试一些。Linux发行版 (例如 乌班图 或 蝶变)作为你的交叉开发平台。要知道,很多设备(包括 RaspBerryPi)正在运行一些 嵌入式Linux系统,所以学习努力是有意义的。那就读 高级Linux编程