ソースコード
main.cpp
#include <iostream>
#include <Python.h>
int main(int argc, char *argv[])
{
Py_Initialize();
PyObject *mpmath = PyImport_ImportModule("mpmath");
PyObject *zeta = PyObject_GetAttrString(mpmath, "zeta");
PyObject *pArgs = PyTuple_New(1);
PyTuple_SetItem(pArgs, 0, PyComplex_FromDoubles(1.0, 1.0));
PyObject *ret = PyObject_CallObject(zeta, pArgs);
const Py_complex a = {};
if (PyArg_Parse(ret, "D", &a))
{
std::cout << a.real << std::endl;
std::cout << a.imag << std::endl;
}
return 0;
}
APIドキュメントへのリンク:
PyImport_ImportModule
PyObject_GetAttrString
PyTuple_New
PyComplex_FromDoubles
PyTuple_SetItem
PyObject_CallObject
PyArg_Parse
(フォーマット指定文字)
コンパイルのコマンド例
環境依存なので適宜修正して使用してください。
compile.bat
g++ main.cpp -o call_py_func_from_c -LC:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python38\libs -lpython38 -IC:\Users\(ユーザー名)\AppData\Local\Programs\Python\Python38\include
-Lライブラリのパス
-lライブラリのファイル名
・・・(拡張子.lib
部分を除く)
-Iインクルードパス
・・・Python.hがあるフォルダを指定
環境
Windows11
Python3.8
Mingw64 (g++を導入するため)
使用するライブラリはpip
でinstallしておく必要あり。
参考サイト