2010-03-31 2 views
2

에 실패, 나는 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"가 아닌 것을 어떻게 알았습니까?

그리고 어떤 문서에 언급되어 있습니다.

+0

".. 초기화 함수의 이름은 initname()이어야합니다. 여기서 name은 모듈의 이름입니다." "하지만이 것이 문제의 원인인지 확신 할 수 없습니다. –

+0

"모듈 이름"이 spam_d 또는 스팸입니까? – Buzz

+0

나는 그 질문을 빨리 읽었음을 인정해야하지만, 빨리 그 문서를 읽는다 ;-). "은 초기화 함수가 initspam()이라고 불리는 경우에만 모듈 스팸을 가져올 수 있으며 첫 번째 인수로 문자열"spam "을 사용하여 Py_InitModule()을 호출해야합니다."및 "규칙 상으로 스팸이라는 파일에 있습니다 .c 또는 spammodule.c. 출력 파일은 spam.pyd (릴리스 모드) 또는 spam_d.pyd (디버그 모드)라고해야합니다. " –

답변

1

파이썬은 디버그 빌드이므로 _d.pyd라는 접미사가 붙은 디버그 라이브러리와 연결을 시도합니다. aganist spam.pyd를 연결하려면 Release 빌드가 필요합니다.

관련 문제