python插件开发怎么扩展主程序_python - 在C ++中扩展和嵌入Python:在导入python脚本之前导入扩展模块需要PyImport_AddModule吗? - 堆栈内存溢出...

我将Python嵌入到C ++应用程序中,我还需要回调Python中的C ++代码。 我已经能够使用以下简单示例执行此操作,但我在C ++应用程序中遇到了一个奇怪的问题。

模块定义......

static PyObject*

say_hello(PyObject* self, PyObject* args)

{

const char* name;

if (!PyArg_ParseTuple(args, "s", &name))

return NULL;

printf("Hello %s!\n", name);

Py_RETURN_NONE;

}

static PyMethodDef HelloMethods[] =

{

{ "say_hello", say_hello, METH_VARARGS, "Greet somebody." },

{ NULL, NULL, 0, NULL }

};

static struct PyModuleDef hellomodule = {

PyModuleDef_HEAD_INIT,

"hello",

NULL,

-1,

HelloMethods

};

PyMODINIT_FUNC

PyInit_hello(void)

{

return PyModule_Create(&hellomodule);

}

在main()...

PyImport_AppendInittab("hello", &PyInit_hello);

// Initialize Python.

Py_Initialize();

PySys_SetArgv(argc, argv);

CPyObject pmod(PyImport_ImportModule("demo")); //CPyObject is a wrapper class

Python文件demo.py ...

import hello

hello.say_hello("something")

当我将此代码添加到我的C ++应用程序时,我在PyImport_ImportModule()处获得了读取访问冲突。 为了防止这种情况,我在导入之前包含了以下代码行。

PyObject * pmod2 = PyImport_AddModule("hello");

这允许我导入包含“import hello”的python脚本,但是我无法执行hello模块中的任何功能。

为什么PyImport_AddModule会阻止读取访问冲突?

我不是一个经验丰富的开发人员,所以我可能会犯一些非常基本的错误。 任何帮助将非常感激。

编辑

我通过添加函数来克服这个问题...

PyModule_AddFunctions(pmod2, HelloMethods);

因此,虽然我已经初始化了模块,但在导入使用该模块的脚本之前,我需要添加它和函数。 我不确定我理解为什么如果有人可以为我合理化这将是有用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值