/ Pythonを使用してc ++ライブラリ(.h&.libファイル)をラップする方法を教えてください。 - python、c ++

Pythonを使ってC ++ライブラリ(.h&.libファイル)をラップする方法はありますか? - python、c ++

私は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 );

見てみると、これが "私が見つけたもの"です。

  • Cythonは主にC向けです。 できる C + +を行うが、が必要です .cpp ファイル
  • Boost.Pythonも必要です .cpp ファイル
  • cffiはCのみです
  • ctypesはCのみです

それで、最善のアプローチは何でしょうか?

回答:

回答№1は1

Boost.Pythonも.cppファイルを必要とします

いいえ、違います。あなたのライブラリをBoost.Pythonでラップすることができます。 Boost.Pythonを使用してC ++コードを公開する方法は、Boost.Pythonが提供するさまざまなマクロを使用して共有ライブラリを作成することです。

Boost.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)
;
}

あなたはあなたのライブラリーでそれをすることができます。 ラッパーを書く必要があります。しかし、ラップされるクラスとメソッドが.cppソースファイルではなく.libライブラリファイルで定義されているという事実は無関係です。


更新

ヘッダファイルのサンプルコードを見ると、これはC ++よりもCスタイルのライブラリのように見えます。確かにBoost.Pythonを使うことができます。 SWIGも選択肢になります。またはctypes。