私はMSVC++ 2010でC++でPython 3を拡張しようとしています。このようなことはまったく新しく、C++にも堪能ではありません。私はここで先に受信Pythonドキュメントやヘルプから続いて、私はコンパイルし、正常に実行され、次のコードを書いている:PythonでC++エクステンションを呼び出す
#include <Python.h>
#include <iostream>
using namespace std;
static PyObject *SpamError;
static PyObject *spam_system(PyObject *self, PyObject *args)
{
const char *command;
int sts;
if (!PyArg_ParseTuple(args, "s", &command))
return NULL;
sts = system(command);
return PyLong_FromLong(sts);
}
static PyMethodDef SpamMethods[] = {
{"system", spam_system, METH_VARARGS,
"Execute a shell command."},
{NULL, NULL, 0, NULL} /* Sentinel */
};
static struct PyModuleDef spammodule = {
PyModuleDef_HEAD_INIT,
"spam", /* name of module */
NULL, /* module documentation, may be NULL */
-1, /* size of per-interpreter state of the module,
or -1 if the module keeps state in global variables. */
SpamMethods
};
PyMODINIT_FUNC
PyInit_spam(void)
{
PyObject *m;
m = PyModule_Create(&spammodule);
if (m == NULL)
return NULL;
SpamError = PyErr_NewException("spam.error", NULL, NULL);
Py_INCREF(SpamError);
PyModule_AddObject(m, "error", SpamError);
return m;
}
int main(int argc, wchar_t *argv[])
{
// Add a builtin module, before Py_Initialize
PyImport_AppendInittab("spam", PyInit_spam);
// Pass argv[0] to the Python Interpreter
Py_SetProgramName(argv[0]);
// Initialise the Python interpreter
Py_Initialize();
// Import module
PyImport_ImportModule("spam");
cout << "test" << endl;
system("PAUSE");
}
を私はしかし、まだいくつかのことがわかりませんよ。このためのヘッダーファイルを作成する必要がありますか、それをどうやって行うべきですか?
また、最終的に私が拡張機能をPythonシェルまたはプログラム内で呼び出すようにする方法はありますか?
私はもっと同意できませんでした。とにかくC Python APIを習得するのが早く、新しい可能性の世界を開くでしょう。 – ixe013
ありがとう、しかし前にBoostをダウンロードしようとしましたが、もう一度試してみました。何らかの理由でダウンロードが途絶えてしまいました。私がダウンロードした他のコンテンツではめったに起こりません。私は誰もこれの理由を知っているとは思わない? – Tagc
私はそれが最終的に正常にダウンロードしたと思います。私はBoostに行く、ありがとう。 :) – Tagc