에 실패, 나는 VC 프로젝트를 생성 및 DLL 파일이 성공적으로 메인 코드를했다가져 오기 C++ DLL은 "확장 및 파이썬 인터프리터를 포함하기"에서 문서에 따라 파이썬
이름 "spam_d.dll"로 생성 된
수입 스팸:
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); }
은 그 때 나는 파이썬에서 다음 명령을 입력 1,515,[39,003 심판] spam.system ("PWD") /SVN/파이썬/PCbuild [39,005 심판]
올바르게 작동 보인다
. 그러나 dll 이름을 spam_d.pyd에서 spam.pyd로 바꿉니다. 파이썬이 모듈을 찾을 수 없습니다.
>>> import spam
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named spam
[39005 refs]
첫 번째 경우부터 파이썬은 "스팸 가져 오기"와 "spam_d.pyd"사이의 관계를 올바르게 설정할 수 있습니다.
파이썬은 "스팸"모듈이 "spam_d.pyd"이지만 "spam.pyd"가 아닌 것을 어떻게 알았습니까?
그리고 어떤 문서에 언급되어 있습니다.
".. 초기화 함수의 이름은 initname()이어야합니다. 여기서 name은 모듈의 이름입니다." "하지만이 것이 문제의 원인인지 확신 할 수 없습니다. –
"모듈 이름"이 spam_d 또는 스팸입니까? – Buzz
나는 그 질문을 빨리 읽었음을 인정해야하지만, 빨리 그 문서를 읽는다 ;-). "은 초기화 함수가 initspam()이라고 불리는 경우에만 모듈 스팸을 가져올 수 있으며 첫 번째 인수로 문자열"spam "을 사용하여 Py_InitModule()을 호출해야합니다."및 "규칙 상으로 스팸이라는 파일에 있습니다 .c 또는 spammodule.c. 출력 파일은 spam.pyd (릴리스 모드) 또는 spam_d.pyd (디버그 모드)라고해야합니다. " –