私は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は1Boost.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。