2009-12-30 37 views
-1

我有以下蟒3文件:如何让Python代码与C++应用程序一起工作?

import base64 
import xxx 

str = xxx.GetString() 
str2 = base64.b64encode(str.encode()) 
str3 = str2.decode() 
print str3 

xxx是由一些C++代码导出的模块。此脚本不起作用,因为在此脚本上调用Py_InitModule将返回NULL。奇怪的是,如果我创建在同一目录

def GetString() : 
    return "test" 

存根xxx.py下python.exe运行原始脚本,它的工作原理和输出以base64字符串。我的问题是为什么它不喜欢xxx.GetString的返回值?在C++代码中,它返回一个字符串对象。我希望我已经很好地解释了我的问题......这是一个奇怪的错误。

+3

除非您发布C++代码,否则无法回答此问题。错误在那里。你的Python代码没有问题。 – dmazzoni 2009-12-30 08:40:12

+0

@George:请添加标签名称“C++”...另外,请发布您的C++代码... – wrapperm 2009-12-30 10:02:21

+0

修复了标签。我会尝试尽快添加代码。 – 2009-12-30 18:08:45

回答

0

Py_InitModule()用于初始化用C语言编写的扩展模块,这不是您在这里查找的内容。如果你想从C中导入一个模块,在C API中有很多功能可用:http://docs.python.org/c-api/import.html

但是,如果你的目标是真正运行一个脚本而不是导入一个模块,你也可以使用其中一个PyRun_XXX()函数描述如下:http://docs.python.org/c-api/veryhigh.html

+0

后者是我的意图,但它仍然没有运行...我想知道是否有任何与GetString返回一个ASCII字符串,而不是Unicode。 – 2009-12-30 17:53:03

+0

这里是: return Py_BuildValue(“s”,“test”); – 2009-12-30 18:05:13

+0

这仍然没有多大意义!请发布使用Py_BuildValue()的结果的代码。不要认为给出关于你正在做什么的部分和椭圆信息就足以让我们正确地诊断你的问题! – 2009-12-30 21:28:44

0

呃...你必须调查为什么Py_InitModule返回NULL。使用该模块发布Python代码将无济于事。

+0

我不知道它为什么会返回NULL - 没有任何内容被打印到控制台。噢,等等。我明白你在说什么。当我尝试使用Py_InitModule加载上面的脚本时,返回NULL,而不是其他模块。 – 2009-12-30 08:10:25

+0

我修正了这个问题。 – 2009-12-30 08:16:08

1

我知道每个人都这样说......但: Boost有一个很棒的库,用于向python展示类并从中获取数据。如果你有问题,并寻找替代品是一个选项,我会强烈推荐C界面的boost python库。我已经使用他们两个,提升胜利手下降。

相关问题