2010-03-31 6 views
2

После документа «Расширение и Встраивание Python интерпретатора», я создал проект VC, и файл DLL был успешно создан с именем «spam_d.dll»длл Импорт C++ потерпел неудачу в Python

Главный код был

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 Py_BuildValue("i", sts); 
} 

static PyMethodDef SpamMethods[] = { 
    {"system", spam_system, METH_VARARGS, "Execute a shell command."}, 
    {NULL, NULL, 0, NULL}  /* Sentinel */ 
}; 

PyMODINIT_FUNC 
initspam(void) 
{ 
    (void) Py_InitModule("spam", SpamMethods); 
} 

Затем я ввел следующую команду в Python:

импорта спама [39003] рефов spam.system ("PWD") /SVN/Python/PCbuild [39005 рефов]

Это выглядит правильно работает. Но когда я переименовал имя dll из spam_d.pyd в spam.pyd. Python не может найти модуль.

>>> import spam 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named spam 
[39005 refs] 

С первого случая, он выглядит питон может настроить связь между «импорта спам» и «spam_d.pyd» правильно.

Как python знает, что модуль «спам» является «spam_d.pyd», но не «spam.pyd»?

И есть ли в нем какие-либо документы.

+0

«... Функция инициализации должна иметь имя initname(), где name - это имя модуля ..», но я не уверен, что это источник вашей проблемы. –

+0

«имя модуля» является спамом или спамом? – Buzz

+0

Должен признать, что я быстро прочитал вопрос, но вы быстро прочитали документацию ;-). "может импортировать спам модуля, если его функция инициализации вызывается initspam(), и он должен вызывать Py_InitModule() со строкой« спам »в качестве своего первого аргумента ..» и «По соглашению он живет в файле со спамом .c или spammodule.c. Выходной файл должен быть вызван spam.pyd (в режиме Release) или spam_d.pyd (в режиме отладки). " –

ответ

1

Python пытается связать библиотеку отладки с суффиксом _d.pyd, так как это сборка Debug. Чтобы связать aganist spam.pyd, вам нужна сборка Release.

Смежные вопросы