私は私のC++コードからインポートするPythonモジュールを持っています(私はPythonを組み込みます)。このモジュールには、create()
というC++コードを保持する(つまり、boost::python::object
インスタンスに格納する)関数が含まれています。埋め込みPython:インポートされたモジュールからfunc objを取得する
これは私が試みたものです。ランタイムエラーは、私のC++コードで示された行に発生します。このエラーは、メイン名前空間内で "hero.create"関数を見つけることができないために発生します。
C++コード
namespace python = boost::python;
// Standard Boost.Python code
// Here I just create objects for the main module and its namespace
python::object main_module(
python::handle<>(python::borrowed(PyImport_AddModule("__main__")))
);
python::object main_namespace(main_module.attr("__dict__"));
// This is my code
//
python::exec("import hero", main_namespace, main_namespace);
python::object func(main_namespace["hero.create"]); // Run-time error
Entity ent = python::extract<Entity>(func());
// I also tried doing this, but it didn't work either...
// python::object func(main_namespace["hero"].attr("__dict__")["create"]);
// However, if I do this, all works fine...
// python::exec("from hero import create", main_namespace, main_namespace);
// python::object func(main_namespace["create"]); // No error
Pythonコード(hero.py)
from entity import Entity
def create():
ent = Entity()
# ...
return ent
「hero .__ dict__」を印刷するとどうなりますか? 'main_namespace [" hero "]。attr(" create ")'だけを試しましたか?私は 'class.member'を使ってCからアクセスできないと思います。 – agf