Win7 x64,Python3.3 32位,Visual Studio 2010/2012(相同的行为)。以下代码编译并运行得很好(即打印当前日期):
extern "C"{ // not having it doesn't make any difference either
#include <Python.h>
}
int main() {
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
"print('Today is', ctime(time()))\n");
Py_Finalize();
return 0;
}
虽然这里失败了,但是在执行The application was unable to start correctly (0xc0000005). Click OK to close the application.
之前,MessageBox说main
(所以没有断点可能)。
extern "C"{ // not having it doesn't make any difference either
#include <Python.h>
}
int main() {
Py_Initialize();
PyObject *p = PyUnicode_FromString("test");
Py_Finalize();
return 0;
}
答案 0 :(得分:1)
所以问题似乎如下:我正在与python3.lib
进行链接,但由于字符串函数完全被Python3.3过度工作,因此正确链接它们似乎存在一些问题。 (无法解释为什么会出现这种情况,因为PyUnicode_FromString
在早期版本的python3中也很明显存在。)
为什么我无法获得有关该事实的有用错误消息也超出了我的意思,但我们就去了:链接python33.lib
完全解决了问题。
答案 1 :(得分:0)
我认为这可能有两个原因,但我很确定这一点:
http://docs.python.org/2/c-api/unicode.html
你需要通过使它成为“test \ 0”来终止我们的常量字符串“test”。如果这不起作用,可能与c文件是ansi而不是utf8的事实有关。
答案 2 :(得分:0)
您破坏的程序链接到使用UCS-2作为内部unicode
表示的Python构建,但安装的Python使用UCS-4,因此PyUnicodeUCS2_*
导入不能解决。您需要改为链接UCS-4版本。