PythonをC / C ++に埋め込むのが比較的簡単な場合、必要なのは、VCにPythonインクルードファイルディレクトリとlibファイルディレクトリを追加することです。 PythonをC / C ++に埋め込む方法を見てみましょう。
VC6.0では、tools-options-directorys-showディレクトリを開き、Pythonインストールディレクトリの下のinludeディレクトリをinludeファイルアイテムに追加し、libsディレクトリをライブラリファイルアイテムに追加します。
VC2005で、tools-options-projectsとsolutions-VC ++ディレクトリを開き、同じ作業を行います。
コードは次のように表示されます。
デバッグ中の実行エラー「python31_d.libファイルが見つかりません」、および理由が判明しました:python31_d.libファイルはデバッグ中に生成する必要があります。そうでない場合、リリース時にのみ生成できます。
# include <python.h
int main(){Py_Initialize();PyRun_SimpleString("Print 'hi, python!'");Py_Finalize();return0;}
Py_Initialize関数のプロトタイプは次のとおりです。voidPy_Initialize()
この関数は、PythonをC / C ++に埋め込むときに使用する必要があり、Pythonインタープリターを初期化します。この関数は、他のPython / CAPIを使用する前に呼び出す必要があります。 Py_IsInitialized関数を使用して、初期化が成功したかどうかを判別し、成功した場合はTrueを返すことができます。
PyRun_SimpleString関数のプロトタイプはintPyRun_SimpleString(const char * command)であり、Pythonコードの一部を実行するために使用されます。
注:ステートメント間のインデントを維持する必要がありますか?
Py_Finalize関数のプロトタイプはvoidPy_Finalize()であり、これはPythonインタープリターを閉じて、インタープリターが占有しているリソースを解放するために使用されます。
PyRun_SimpleFile関数を使用して、「。py」スクリプトファイルを実行できます。関数のプロトタイプは次のとおりです。
int PyRun_SimpleFile(FILE *fp, const char *filename);
ここで、fpは開いているファイルのポインター、filenameは実行するpythonスクリプトファイルの名前です。ただし、この関数の公式リリースはvisual studio 2003.NETによってコンパイルされているため、他のバージョンのコンパイラを使用すると、バージョンが原因でFILE定義がクラッシュする可能性があります。同時に、簡単にするために、次の方法を使用してこの関数を置き換えることができます。
PyRun_SimpleString( "execfile( 'file.py')"); // execfileを使用してpythonファイルを実行する
Py_BuildValue()は、数値と文字列をPythonで対応するデータ型に変換するために使用されます(C言語では、すべてのPython型がPyObject型として宣言されます)。関数のプロトタイプは次のとおりです。
PyObject *Py_BuildValue(const char *format, …..);
PyString_String()は、PyObject *型変数をC言語で処理できるchar *型に変換するために使用されます。具体的なプロトタイプは次のとおりです。
char* PyString_String(PyObject *p)。
ナレッジポイントの拡張:
C / C ++ DLL動的リンクライブラリを呼び出すPythonのメソッド
まず、DLLプロジェクト(この場合、作成環境はVS 2005)、ヘッダーファイルを作成します。
//hello.h
# ifdef EXPORT_HELLO_DLL
# define HELLO_API __declspec(dllexport)
# else
# define HELLO_API __declspec(dllimport)
# endif
extern "C"{
HELLO_API int IntAdd(int , int);}
CPPファイル:
//hello.cpp
# define EXPORT_HELLO_DLL
# include "hello.h"
HELLO_API int IntAdd(int a, int b){return a + b;}
ここで注意すべき点が2つあります。
(1)DLLの関数呼び出し規則に従って、Pythonは対応する関数を使用してDLLをロードするため、コンパイル時に関数呼び出し規則で__cdeclまたは__stdcallが使用されているかどうかを確認します。
(2)C ++プロジェクトを使用する場合、エクスポートされた関数がpythonで認識されるように、エクスポートされたインターフェイスはextern "C"である必要があります。
これまでのところ、開発用のC / C ++を埋め込むPythonの詳細な説明に関するこの記事を紹介します。開発コンテンツにC / C ++を埋め込む方法については、ZaLou.Cnの以前の記事を検索するか、以下の関連記事を引き続き参照してください。将来的にはZaLou.Cnをたくさんサポートしてください!
Recommended Posts