用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的好方法。我的问题是:

  • 对于C实现,我是否能够在连接之后将MHandle指针传递回Python,以供以后使用(即调用read函数)?指针是否有任何意义,稍后在不同的函数调用中使用

  • < > > C++实现时,DEV对象是否可以传递到Python代码,以便以后返回到<代码>读()/<代码>?你能用任意对象来做吗

    我是一名机械工程师,如果这是胡言乱语或完全不知情,我很抱歉。非常感谢您的指导

    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++函数声明为
    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