我有一个带有以下命名空间和类的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进行以下调用:
sys = avdecc_lib::create_system(avdecc_lib::system::LAYER2_MULTITHREADED_CALLBACK, netif, controller_obj);
我尝试了这个没有成功:
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
?
答案 0 :(得分:0)
枚举常量不会从库中导出,因此无法在运行时找到它们。您唯一的选择是根据标题确定数值。如果常量没有明确赋值,则它比前一个常量多一个,如果它是枚举中的第一个常量,则为0。
顺便说一句,你的函数已经用STDCALL调用约定声明,但cdll使用CDECL调用约定。您需要使用windll来正确调用该函数。