如何使用Python C类型访问C++命名空间和类

2024-06-16 11:39:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个C++类库,有以下命名空间和类:

namespace avdecc_lib
{
    class net_interface;
    class controller;

    class system
    {
      public:
         enum system_type
         {
            LAYER2_MULTITHREADED_CALLBACK,
         };
    }
    extern "C" AVDECC_CONTROLLER_LIB32_API system * STDCALL create_system(system::system_type type, net_interface *netif, controller *controller_obj);

我想在Python中对ctypes使用以下调用:

^{pr2}$

我试了一下但没有成功:

self.avdecc_lib = cdll.LoadLibrary("path/to/lib.so")
self.sys = self.avdecc_lib.create_system(self.avdecc_lib.system.LAYER2_MULTITHREADED_CALLBACK,self.netif,self.controller_obj)

库已经加载并且对象生成成功,但是我没有指出函数调用出了什么问题。在

如何访问avdecc_lib::system::LAYER2_MULTITHREADED_CALLBACK?在


Tags: selfobjnetlibtypecreatecallbacksystem
1条回答
网友
1楼 · 发布于 2024-06-16 11:39:35

枚举常量不是从库中导出的,因此无法在运行时找到它们。您唯一的选择是根据标题确定数值。如果该常量尚未显式赋值,则它比上一个常量多1个,如果它是枚举中的第一个常量,则为0。在

顺便说一下,您的函数是用STDCALL调用约定声明的,但是cdll使用CDECL调用约定。您需要使用windell来正确调用函数。在

相关问题 更多 >