python写dll接口_当DLL有一个嵌入的Python接口时,从DLL(C++编程)到Python脚本中导入函数...

我用c++编写了一个使用嵌入式Python解释器的库(dll)。

当c++程序使用这个库时,在嵌入式解释器中执行Python脚本可以很好地工作。在

如果我从Python程序调用dll的函数,就会遇到麻烦。

当dll通常通过调用Py_Initialize()来启动嵌入式解释器时,已经有一个解释器在运行(我可以通过调用Py_IsInitialized()来测试这一点)。

当我试图使用这个解释器时,程序崩溃了。在

重现行为的最小示例:

dll代码:#include "stdafx.h"

#include

extern "C" __declspec(dllexport)

int testIsInitialized()

{

return Py_IsInitialized();

}

extern "C" __declspec(dllexport)

void testRunSimpleString()

{

PyRun_SimpleString("print('test')");

}

Python脚本:

^{pr2}$

输出:1

Traceback (most recent call last):

File "test_dll.py", line 9, in

dll.testRunSimpleString()

OSError: exception: access violation reading 0x0000000000000010

我的主要问题是:

如何从由不同Python程序导入的c++库中执行Python代码?在

更新

当我在testRunSImpleString()函数中获取全局解释器锁(GIL)时,这个例子起作用。

我不明白为什么这是必要的。在

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值