如何在wxWidgets (c++) 应用中嵌入wxPython
我正在用 MSVC++ 开发一个 wxWidgets-3.0 的应用程序,并且里面嵌入了 wxPython-3.0。
虽然我的系统已经安装了 Python 2.7 和 wxPython-3.0,但我还是做了以下操作:(因为我们需要确保 wxWidgets 应用程序、Python 和 wxPython 的构建配置一致)
我下载并构建了 wxWidgets,选择了 64 位的 DLL-Debug 模式,然后成功运行了一个最小示例项目。
我下载了 Python 2.7 的源代码,并在 64 位的 Debug 模式下构建,然后把调试用的 DLL 和库文件复制到了 Python 的安装文件夹(\DLLs 和 \libs)。
我下载了 wxPython 3.0 的源代码,并在 64 位的 DLL-Debug 模式下构建,然后把调试用的 DLL 和库文件复制到了 Python 的安装文件夹(\Lib\site-packages\wx-3.0-msw\wx)。
我从 wxPython 的嵌入示例中获取了 embedded.cpp 文件,并把里面的代码复制到了我 wxWidgets 示例项目的 minimal.cpp 文件中。
项目属性设置:
c/c++:
General -- Additional include directories
C:\Python27\include
.\..\..\lib\vc_dll\mswud
.\..\..\include
链接器:
General -- Additional library directories
C:\Python27\libs
D:\Nuvsoft27\newpy\wxWidgets-3.0.0\lib\vc_dll
Input -- Additional dependncies
wxmsw30ud_core.lib
.
.
.
Python27_d.lib
系统环境变量。
PATH -- D:\Nuvsoft27\newpy\wxWidgets-3.0.0\lib\vc_dll
PYTHONPATH -- C:\Python27;C:\Python27\Lib\site-packages\wx-3.0-msw
问题:
在 wxPyCoreAPI_IMPORT() 函数中出现了错误,它返回了 false。
请问你能帮我解决这个问题吗?我是不是做错了什么。
你可以在这里看到 调用栈:
wxPyCoreAPI_IMPORT() -->
(wxPyCoreAPI*)PyCObject_Import("wx._core_", "_wxPyCoreAPI") -->
PyImport_ImportModule(module_name) --> PyImport_Import(pname) -->
PyObject_CallFunction(import, "OOOOi", module_name, globals, globals, silly_list, 0, NULL); -->
call_function_tail(callable, args) --> PyObject_Call(callable, args, NULL) -->
PyCFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) -->
builtin___import__(PyObject *self, PyObject *args, PyObject *kwds) -->
PyImport_ImportModuleLevel(char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level) -->
import_module_level(name, globals, locals, fromlist, level) -->
load_next(parent, level < 0 ? Py_None : parent, &name, buf, &buflen); -->
import_submodule(mod, p, buf);
在上面的函数中,他们在检查模块,如果 mod == Py_None,就返回 NULL,而它确实进入了这个条件并返回了 NULL。
1 个回答
0
你可能还需要把 c:\Python27\Lib\site-packages\wx-3.0-msw 加入到 PYTHONPATH 里。