私はあなたの助けが必要です!C++から別のファイルで定義されたPython関数を呼び出す方法は?
どのように私はC言語でPythonの関数を呼び出すことができ++次の.pyソースに基づく:
DefineEasyCalls.py
def myfun():
return 100
Testfile.py
from DefineEasyCalls import *
fun = myfun()
私が使用したいです私のC + +プログラムのInputfileとしてTestfile.py。そこに、私はmyfun()を呼び出して、何かをしたいと思います。あなたはこれを達成するためのアイデアを持っていますか?たぶん私は両方のファイルをC++でインポートし、Testfile.pyがmyfunというメソッドであり、testfile.pyファイルから対応する関数を呼び出すのかどうかを確認しますが、Testfile.pyにmyfunの関数入力がある場合はどうなりますか?その場合、この戦略は私にとっては役に立たないでしょう。
私がTestfile.pyに直接myfunを定義している場合(Testfile.py = DefineEasyCalls.pyのコード)、Testfile.pyでコードを実行するよりも、しかし、私はDefineEasyCalls.pyではなく、入力ファイルとしてTestfile.pyを使用したい!さらに、私はまた、私はまた、後でC + +で使用するいくつかの入力引数をTestfile.pyにmyfunを与えたいと思います。誰かにこれをどうやって考えさせるか?私はMSVC2015とPython 3.6を使用し
#include <Python.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
int callmyfun();
int main()
{
int a = callmyfun();
int b = 1;
cout << a+b << endl;
cin.get();
return 0;
}
int callmyfun()
{
PyObject *pName, *pModule, *pDict, *pFunc;
PyObject *pValue;
Py_Initialize();
PyObject* sysPath = PySys_GetObject("path");
PyList_Append(sysPath, PyBytes_FromString("C:/ .. path .../x64/Release"));
// Load the module
pName = PyUnicode_DecodeFSDefault("Testfile");
pModule = PyImport_Import(pName);
Py_DECREF(pName);
cout << pName << endl;
if (pModule != NULL)
{
cout << "module found\n";
pDict = PyModule_GetDict(pModule);
pFunc = PyObject_GetAttrString(pModule, "myfun");
if (pFunc != NULL) {
pValue = PyObject_CallObject(pFunc, NULL);
printf("Result of call: %ld\n", PyLong_AsLong(pValue));
Py_DECREF(pValue);
long long L = PyLong_AsLongLong(pValue);
return L;
}
else {
std::cout << "Couldn't find func\n";
return 0;
}
}
else
{
cout << "module not found!\n";
return 0;
}
Py_Finalize();
}
:
は、ここに私のC++コードです。ご協力ありがとうございました!
さらに、私は例えばmyfun(10)をC++のTestfile.pyから呼び出すことができますか? – stevula