我的c ++库只包含.h
和.lib
个文件(没有 cpp
文件),用于与硬件进行通信,我需要使用来自Python的这个库。我对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 );
环顾四周,这是我发现的:
.cpp
个文件.cpp
个文件那么,最好的方法是什么?
答案 0 :(得分:1)
Boost.Python还需要.cpp文件
不,不。您可以使用Boost.Python包装库。使用Boost.Python公开C ++代码的方法是使用Boost.Python提供的各种宏编写共享库。
包装此C ++类型的documentation for Boost.Python demonstrates:
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。