Pythonは詳細な開発のためにC / C ++を組み込んでいます

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

Pythonは詳細な開発のためにC / C ++を組み込んでいます
ubuntu18用のpython3.7のインストールに関する詳細なチュートリアル
14. MysSQL for Python3
詳細なチュートリアルを構築するためのPython3開発環境
Pythonインターフェース開発の実装手順の詳細な説明
python開発[最初の記事]
詳細なPythonIOプログラミング
Pythonプロセス制御の一般的なツールの詳細な説明
詳細なPythonループのネスト
Ubuntu16.04環境でPython3.6の下にDjangoをインストールするための詳細な手順
画像スティッチング用のpythonopencv
ubuntuビルドpython開発環境
pythonクローラー用のSeleniumビジュアルクローラー
一般的に使用されるPython3インターフェイスの開発.md