Я пытаюсь создать простую оболочку Python для библиотеки, которую мы используем. Но странно, что это расширение не работает с официальной сборкой Python, только с моей собственной сборкой Python. Хотя они были основаны на той же версии исходного кода. Я также новичок C/C++, поэтому не уверен, что моя программа верна или нет.Расширение Windows Python C работает только с моей собственной сборкой Python (32-разрядная сборка с использованием VC++ 2008 Express)
Так один из метод, который я пытаюсь обернуть, как это (копируется из их SDK документа):
Синтаксис
недействительным IoWrite (IOHANDLE СМО, аннулируются * sourceBuffer, длинный размер);
Параметры
тио Ручка к сигналу ввода-вывода, то есть значение, возвращаемое из операции IoConnect.
sourceBuffer Параметр, содержащий значение, которое должен иметь IO-сигнал.
размер Размер сигнала для записи.
Возвращаемое значение
Возврат не используется.
Пример кода
IOHANDLE hIoSig;
long ioVariable = 10;
hIoSig = IoConnect("IoSigName", sizeof(ioVariable));
IoWrite(hIoSig, &ioVariable, sizeof(ioVariable));
Вот расширение Python:
#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:
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],
)
Если я использую официальный Python построить 2.7 .5, это приведет к сбою некоторых других приложений, которые используют этот SDK, но я не h ave, если я использую его с моим собственным Python 2.7.5, созданным с помощью VS 2008 Express.
Большое спасибо!
Дополнительная информация о компиляторе: Я использовал MS Visual C++ 2008 Express Edition с пакетом обновления 1 (SP1), ничего больше.
Составлено с использованием "C: \ python27 \ python.exe setup.py строить"
Можете ли вы описать, как вы построили расширение. С каким SDK вы связываетесь? Как вы связываете среду выполнения? –
@DavidHeffernan Привет! Я использовал Visual C++ 2008 Express с пакетом обновления 1 (SP1). –
Да. С каким SDK вы связываетесь? Как вы связываете среду выполнения? –