python呼び出しcの関数
4602 ワード
python呼び出しcの関数
環境:vs 2017,python 3.6 URL:pythonにc++拡張を追加
環境の設定
python環境ダウンロードvs 2017、URL:vs 2017コミュニティ版 インストールvs 2017、注意:オンラインインストール時にpythonをインストールすることを選択し、python 3をデフォルトでインストールする.6 vs 2017->ビュー->その他のウィンドウ->python環境 を開くファイル->新規->プロジェクト->Python->Pythonアプリケーション->名前、場所 右クリック[ソリューションcamera]->追加->新規プロジェクト->Visual C+->一般->空のプロジェクト->名前、場所 右クリック[c++アイテム]->追加->新規アイテム->C++ファイル->名前、場所 右クリック「c++プロジェクト」->プロパティ->構成プロパティ(ピクチャの追加)、pythonの追加ディレクトリ、依存ライブラリディレクトリ、ライブラリ名 右クリック[c++プロジェクト]->プロパティ->一般->ターゲットファイル名(pythonライブラリ名を生成)、ターゲットファイル拡張子(.pyd)、プロパティ->一般->プロジェクトデフォルト->構成タイプ->ダイナミックライブラリ(.dll).
コード実装
c++コード
pythonコード
まとめ
私はこれらが実行可能であることをテストして、データあるいは関数をpythonモジュールの下の関数に包装して、pythonコードの中で呼び出して取得することができます.何か問題があれば伝言を残してもいいです.
環境:vs 2017,python 3.6 URL:pythonにc++拡張を追加
環境の設定
python環境
: python3.6 , python3.6 , , “ ” ->
コード実装
c++コード
#include
#include
using namespace std;
vector<int>images_data;
for(int i=0;i<5;i++){
images_data.push_back(i);
}
// ("i" )
PyObject* get_image_size(PyObject* self, PyObject* o)
{
int length = images_data.size();
return Py_BuildValue("i", length);
}
// , vector tuple
PyObject* get_image_data(PyObject* self, PyObject* o)
{
PyObject* tuple = PyTuple_New(images_data.size());
for (int i = 0; i < images_data.size(); i++) {
PyTuple_SetItem(tuple, i, Py_BuildValue("i", images_size[i]));
}
return tuple;
}
//
PyObject* camera_lock(PyObject* self, PyObject* o) {
images_data.lock();
return o;
}
//
PyObject* camera_unlock(PyObject* self, PyObject* o) {
images_data.unlock();
return o;
}
//
static PyMethodDef panoramamodule_methods[] = {
{ "get_image_size", (PyCFunction)get_image_size, METH_O, nullptr },
{ "get_image_data", (PyCFunction)get_image_data, METH_O, nullptr },
{ "camera_lock", (PyCFunction)camera_lock, METH_O, nullptr },
{ "camera_unlock", (PyCFunction)camera_unlock, METH_O, nullptr },
{ nullptr, nullptr, 0, nullptr }
};
//
static PyModuleDef panoramamodule_module = {
PyModuleDef_HEAD_INIT,
"panoramamodule",
"Provides panorama image data",
0,
panoramamodule_methods
};
// , .pyd
PyMODINIT_FUNC PyInit_panoramamodule() {
return PyModule_Create(&panoramamodule_module);
}
pythonコード
# panoramamodule, , 0
from panoramamodule import *
import numpy as np
image_size =get_image_size(0)
image_data =np.array(get_image_data(0))
まとめ
私はこれらが実行可能であることをテストして、データあるいは関数をpythonモジュールの下の関数に包装して、pythonコードの中で呼び出して取得することができます.何か問題があれば伝言を残してもいいです.