【发布时间】:2018-04-09 05:24:40
【问题描述】:
我正在为 Python 3 开发 C++ 扩展,并尝试将 DateTime 对象传递给我的函数。 PyDateTime_Check 函数似乎可以工作并返回 true,但是当我尝试从 DateTime 对象中获取年份时,它返回 65535。我将 datetime.datetime.now() 从 python 传递给函数。
我的 C++ 代码是:
#include "Python.h"
#include "datetime.h"
static PyObject* new_func(Pyobject* self, PyObject* args)
{
PyDateTime_DateTime *pydate;
if(!PyArg_ParseTuple(args, "O", &pydate)){
return Py_BuildValue("s", "Error");
}
int year;
year = PyDateTime_GET_YEAR(pydate);
return PyLong_FromLong(year);
}
static PyMethodDef NbourMethods[] =
{
{"new_func", new_func, METH_VARARGS, "Do date things."},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef cFunc =
{
PyModuleDef_HEAD_INIT,
"cFunc", /* name of module */
"", /* module documentation */
-1, /* size of per-interpreter state of the module or -1 if global */
NbourMethods
};
PyMODINIT_FUNC PyInit_cFunc(void)
{
if (!PyDateTimeAPI) { PyDateTime_IMPORT;}
return PyModule_Create(&cFunc);
}
那么我的python代码是:
import cFunc
start = datetime.datetime.now()
print(str(cFunc.new_func(start)))
有什么想法吗?我能够成功运行 PyDateTime_Check(pydate) 并获得返回值为 true,但由于某种原因,它不会在上面的代码中返回年份(返回 65535)。提前致谢!
【问题讨论】:
-
提取minimal reproducible example。另外,不要在标题中添加标签,而是用几句话概括你的问题。
-
谢谢,我已经在上面添加了完整的代码。
标签: python c++ python-extensions