如何使用 Python 包装 c++ 库(.h 和 .lib 文件)?
How can I wrap a c++ library (.h & .lib files) using Python?
我有一个c++库,只包含.h
和.lib
文件(nocpp
文件),用于与硬件通信,我需要使用Python中的这个库。我对c/c++没有太多经验,所以这对我来说有点陌生。
.h
文件看起来像这样:
#define MSG_DLL_VERSION 10
typedef struct {
ULONG ulDLLVersion;
// vipmsg variables
PMSGACCOUNTS pMsgAccounts;
PMSGSEGMENT pMsgSegment;
USHORT usMsgSegmentNum;
} MSGSTATICDATA, *PMSGSTATICDATA;
VOID msgGetDLLRedirections ( PMSGSTATICDATA *pData );
VOID msgSetDLLRedirections ( PMSGSTATICDATA pData );
环顾四周,我发现了以下内容:
- Cython主要用于C。它可以执行C++,但需要
.cpp
文件 - Boost.Python还需要
.cpp
文件 - cffi仅为C
- ctypes仅为C
那么,什么是最好的方法呢?
Boost.Python还需要.cpp文件
不,没有。你可以用Boost.Python包装你的库。使用Boost.Pathon公开C++代码的方法是使用Boost.Python.提供的各种宏编写一个共享库
Python的文档演示了包装这个C++类型:
struct World
{
void set(std::string msg) { this->msg = msg; }
std::string greet() { return msg; }
std::string msg;
};
包装看起来像这样:
#include <boost/python.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(hello)
{
class_<World>("World")
.def("greet", &World::greet)
.def("set", &World::set)
;
}
你可以用你的图书馆做到这一点。您确实需要编写包装。但是,被包装的类和方法是在.lib库文件而不是.cpp源文件中定义的,这一事实无关紧要。
更新
从头文件中的示例代码来看,这似乎更像是一个C风格的库,而不是C++。您当然可以使用Boost.Python来实现这一点。SWIG也是一种选择。或者ctypes。
相关文章:
- CMake 生成的 MSVC 项目找不到符号,即使为其相关 dll 正确生成了 lib 文件也是如此
- 从 .lib 文件创建一个.dll文件
- 链接器找不到导入的 DLL 的 LIB 文件
- 有没有适用于Windows.lib文件的GNU二进制文件描述符(BFD)
- 在Qt中链接具有非标准名称的lib文件
- C++-在没有自定义.lib文件的情况下从Lua C模块调用Lua函数
- 是否可以将 EXE 文件作为 lib 文件链接到另一个项目?
- C++ CLR dll 需要 .lib 文件,但非 CLR 不需要
- G++ 无法链接 curl lib 文件
- 如何找出依赖于LIB文件的DLL列表?
- 即使使用lib文件也无法修复未解析的外部符号_AES_encrypt
- C++ .lib 文件到墨西哥
- 效果11d.lib文件,DirectX11在2017/2015上
- 如何强制链接器在 lib 文件中查找非修饰名称
- 您如何找到哪个.lib文件随身携带
- lib文件是以独占静态方式链接的,还是需要专门编译(VS2015)
- 在Mac上,Rcpp没有lib文件夹
- 在Visual Studio 2010中创建.lib文件
- SFML-Graphics-2.dll缺少SFML LIB文件夹
- 在VS2013中使用LIB文件