사용중인 라이브러리에 대한 간단한 Python 래퍼를 작성하려고합니다. 그러나 이상한 것은이 확장 기능이 공식 Python 빌드에서는 작동하지 않으며, 오직 내 자신의 파이썬 빌드에서만 작동한다는 것입니다. 비록 그들이 소스 코드의 동일한 버전을 기반으로했다. 저는 또한 C/C++ 신인이기 때문에 제 프로그램이 맞는지 확실하지 않습니다.Windows Python C 확장은 내 자신의 Python 빌드 (VC++ 2008 Express를 사용하여 32 비트 빌드)에서만 작동합니다.
그래서 내가 랩을 시도하고있는 방법 중 하나가 이렇게 있습니다 (자신의 SDK 문서에서 복사) :
구문
을무효 IoWrite (IOHANDLE HIO, 무효 * sourceBuffer, 롱 사이즈)
파라미터
HIO 입출력 신호로의 핸들의 IoConnect 동작에서, 즉 리턴 값.
sourceBuffer IO 신호가 가져야하는 값을 포함하는 매개 변수입니다.
크기 쓸 신호의 크기.
반환 값
반환 값이 없습니다.
코드 예
IOHANDLE hIoSig;
long ioVariable = 10;
hIoSig = IoConnect("IoSigName", sizeof(ioVariable));
IoWrite(hIoSig, &ioVariable, sizeof(ioVariable));
여기 파이썬 확장이다 :
from distutils.core import setup, Extension
simio_module = Extension('SimIo',
include_dirs = ['Headers', 'Libs'],
libraries = ['user32', ],
sources = ['SimIoModule.c', 'Libs\SimIoPort.c'],
)
setup(name = "SimIo",
version = "0.1",
description = "SimIo",
ext_modules = [simio_module],
)
나는 공식 파이썬을 사용하는 경우 2.7을 구축 : 여기
#include "Python.h"
#include <conio.h>
#include "SimIoPort.h"
static PyObject *
ex_IoWrite(PyObject *self, PyObject *args)
{
char *IoPortName;
long PortValue;
IOHANDLE hIOsignal;
if (!PyArg_ParseTuple(args, "si", &IoPortName, &PortValue))
{
return NULL;
}
hIOsignal = IoConnect(IoPortName, sizeof(PortValue));
IoWrite(hIOsignal, &PortValue, sizeof(PortValue));
Py_INCREF(Py_None);
return Py_None;
}
static PyMethodDef SimIo_methods[] = {
{"io_write", ex_IoWrite, METH_VARARGS,
"IoWrite method."},
{NULL, NULL, 0, NULL}
};
PyMODINIT_FUNC
initSimIo(void)
{
Py_InitModule("SimIo", SimIo_methods);
}
내 setup.py이다가 .5,이 SDK를 사용하는 다른 응용 프로그램이 충돌하지만, VS 2008 Express로 빌드 된 내 자신의 Python 2.7.5와 함께 사용하면 문제가 생깁니다.
고맙습니다.
컴파일러에 관한 추가 정보 : Microsoft Visual C++ 2008 Express Edition SP1 이상을 사용하고 있었지만 그 밖의 것은 없습니다. 사용하여 컴파일 된
"C를 : \ Python27 \ python.exe를 setup.py 구축"같은 소스 코드에서
확장 기능을 어떻게 구성했는지 설명 할 수 있습니까? 어떤 SDK를 연결하고 있습니까? 런타임을 어떻게 연결하고 있습니까? –
@DavidHeffernan 안녕하세요! Visual C++ 2008 Express with SP1을 사용하고있었습니다. –
예. 어떤 SDK를 연결하고 있습니까? 런타임을 어떻게 연결하고 있습니까? –