Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 我可以创建我的C++;对象,但可以';t访问方法_Python_C++_Swig - Fatal编程技术网

Python 我可以创建我的C++;对象,但可以';t访问方法

Python 我可以创建我的C++;对象,但可以';t访问方法,python,c++,swig,Python,C++,Swig,对不起,这里有很多,但我真的认为所有这些信息都与我要问的问题有关 我用SWIG、编译等方式封装了C++类,在Python脚本中,我创建了类的实例,然后尝试调用该类的方法。注意,我说“试试”打电话。对该方法的调用失败。有关实施和“失败”的详细信息如下 首先,我正在用Windows应用程序构建Python3.4解释器,并调用python脚本,如下所示: Py_Initialize(); /* Some code here to set up python paths. */ ..... PyOb

对不起,这里有很多,但我真的认为所有这些信息都与我要问的问题有关

我用SWIG、编译等方式封装了C++类,在Python脚本中,我创建了类的实例,然后尝试调用该类的方法。注意,我说“试试”打电话。对该方法的调用失败。有关实施和“失败”的详细信息如下

首先,我正在用Windows应用程序构建Python3.4解释器,并调用python脚本,如下所示:

Py_Initialize();

/* Some code here to set up python paths. */
.....

PyObject *pName = PyUnicode_FromString("hello");
if(pName == NULL)
{
    Py_Finalize();
    return false;
}

PyObject* pModule = PyImport_Import(pName);
if(pModule == NULL)
{
    Py_Finalize();
    return false;
}

/* "go" is the name of the function in my python script that I want to call. */
PyObject *pFunc = PyObject_GetAttrString(pModule, "go");
if(pFunc == NULL)
{
    Py_Finalize();
    return false;
}

PyObject *pArgs = PyTuple_New(0);
PyObject *pValue = PyObject_CallObject(pFunc, pArgs);
if(pValue == NULL)
{
    Py_Finalize();
    return false;
}

Py_Finalize();
return true;
===================

这是我的班级结构:

class BoganDocument
{
private:
    BoganMetadataSet    myMetadata;

public:
    // Constructor
    BoganDocument();

    // Destructor
    virtual ~BoganDocument();

    // Useful methods.
    wstring     getMetadataValue(wstring metadata_name);
}
===================

这是我的Python脚本(名为“hello.py”)

=====================

我的控制台屏幕上的输出如下所示:

trying C:\Program Files (x86)\MyApp\Python\swig_runtime_data4_d.pyd
trying C:\Program Files (x86)\MyApp\Python\swig_runtime_data4.py
trying C:\Program Files (x86)\MyApp\Python\swig_runtime_data4.pyw
trying C:\Program Files (x86)\MyApp\Python\swig_runtime_data4.pyc
trying c:\MyApp\Workplace\swig_runtime_data4_d.pyd
trying c:\MyApp\Workplace\swig_runtime_data4.py
trying c:\MyApp\Workplace\swig_runtime_data4.pyw
trying c:\MyApp\Workplace\swig_runtime_data4.pyc
import 'BoganDocument' # <_frozen_importlib.SourceFileLoader object at 0x10D2E3F0>
import 'hello' # <_frozen_importlib.SourceFileLoader object at 0x10D2E1C0>
I'm in go()
I made a document
正在尝试C:\ProgramFiles(x86)\MyApp\Python\swig\u runtime\u data4\u d.pyd
正在尝试C:\ProgramFiles(x86)\MyApp\Python\swig\u runtime\u data4.py
正在尝试C:\ProgramFiles(x86)\MyApp\Python\swig\u runtime\u data4.pyw
正在尝试C:\ProgramFiles(x86)\MyApp\Python\swig\u runtime\u data4.pyc
正在尝试c:\MyApp\Workplace\swig\u runtime\u data4\u d.pyd
正在尝试c:\MyApp\Workplace\swig\u runtime\u data4.py
正在尝试c:\MyApp\Workplace\swig\u runtime\u data4.pyw
正在尝试c:\MyApp\Workplace\swig\u runtime\u data4.pyc
导入“BoganDocument”#
导入“你好”#
我在围棋中
我做了一份文件
===================

请注意,我已将PYTHONVERBOSE设置为11,以获得尽可能多的诊断信息。请注意,所有消息都在“print”(“我制作了一个文档”)之后停止。没有语法错误,什么都没有。“PyObject*pValue=PyObject_CallObject(pFunc,pArgs);”之后的pValue值为NULL

现在,已知在“d=BoganDocument.BoganDocument()”处调用构造函数是可行的,因为我已经在BoganDocument构造函数中设置了一个断点并单步执行

我还在BoganDocument的getMetadataValue方法中设置了一个breakbpoint,但从未实现。这是个谜


毫无疑问,我有一个bug,但我一点线索也没有。

您是否进入了
getMetadataValue
的SWIG包装器?当您执行<代码> dGETMeAdAtAvavue[]( FRM Python)时,C++包装器被调用,C++包装器随后调用C++中的“代码> Bang::GETMeta DavaValue<代码>。因为你永远不会进入C++实例的代码> GETMeta DavaValue,也许Sigg包装器发现调用是非法的,或者这样(SWIG通常不会默默地忽略问题,但我不知道还有什么建议)。由于您使用的是宽字符串,请确保包含
std\u wstring.i

Scholloii:这是完成交易的建议。谢谢我发现SWIG并不完全理解wstring是什么。通过谷歌搜索和四处询问,我在BogandDocument中添加了includes for和,然后定义UNICODE 1。我打开了接口文件。很高兴听到,接下来我要问的是检查你的
。我
文件是否包含
std\wstring。我
但我不知道
UNICODE
。我已经把我的评论变成了一个答案,希望你能接受。您可能希望将您的评论附加到答案中,并删除上面的评论,以保持清晰,但不是批评。欢迎来到SO!
trying C:\Program Files (x86)\MyApp\Python\swig_runtime_data4_d.pyd
trying C:\Program Files (x86)\MyApp\Python\swig_runtime_data4.py
trying C:\Program Files (x86)\MyApp\Python\swig_runtime_data4.pyw
trying C:\Program Files (x86)\MyApp\Python\swig_runtime_data4.pyc
trying c:\MyApp\Workplace\swig_runtime_data4_d.pyd
trying c:\MyApp\Workplace\swig_runtime_data4.py
trying c:\MyApp\Workplace\swig_runtime_data4.pyw
trying c:\MyApp\Workplace\swig_runtime_data4.pyc
import 'BoganDocument' # <_frozen_importlib.SourceFileLoader object at 0x10D2E3F0>
import 'hello' # <_frozen_importlib.SourceFileLoader object at 0x10D2E1C0>
I'm in go()
I made a document