如何使用Python ctypes访问c++命名空间和类
How to access C++ Namespaces and Classes with Python ctypes
我有一个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);
I try this without success:
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
?
枚举常量不会从库中导出,因此无法在运行时找到它们。您唯一的选择是根据报头确定数值。如果该常量没有被显式赋值,则它比前一个常量大1,如果它是枚举中的第一个常量,则为0。
顺便说一下,你的函数是用STDCALL调用约定声明的,但是cdll使用CDECL调用约定。您需要使用windll来正确调用该函数。相关文章:
- 命名空间中具有.h和.cpp文件的类
- 从父命名空间重载类型
- 在命名空间中定义函数还是限定函数
- C++:对不存在的命名空间使用命名空间指令
- 通过继承类使用来自不同命名空间的运算符
- 使用命名空间时出现多个定义错误
- CUDA内核和数学函数的显式命名空间
- 嵌套的匿名命名空间
- CMakeLists.txt中的命名空间表示法
- 类是C++中的命名空间吗
- 在命名空间中使用全局命名空间中的函数
- 如何使 std::sort 在 std::swap 和我的命名空间的模板化交换之间没有名称冲突?
- '使用命名空间{嵌套在另一个命名空间中的某个命名空间}"
- 是否可以将函数导入命名空间,但不能导出它?
- C++ C++类中的命名空间降级
- 如何使用 soong 命名空间来有条件地编译模块
- 使用 Clang++ 有没有办法将文件作为命名空间等包含?
- 使用 make 编译 MPI,几个命名空间错误,例如"错误:未知类型名称'使用'?
- 如何通过命名空间调用非静态方法
- 在命名空间名称之前加上 :: 是什么意思?