정확히 위해 실제로 an example in the SWIG documentation있다 :
#include <stdio.h>
void test(int n, char *argv[])
{
int i;
for(i=0;i<n;i++)
{
printf("%s\n", argv[i]);
}
}
그런 다음 다음과 같은 파이썬 코드로이 C 함수를 호출 할 수 있습니다 :
먼저 C 코드, 그것은 ARGV의 내용을 변경하지 않아야합니다 이런 종류의 파이썬 함수.
import test
test.foo(["a", "b", "c"])
test
당신이 꿀꺽 꿀꺽 및 준 모듈의 이름입니다
%typemap(in) (int argc, char *argv[]) {
int i;
if (!PyList_Check($input)) {
PyErr_SetString(PyExc_ValueError, "Expecting a list");
return NULL;
}
$1 = PyList_Size($input);
$2 = (char **) malloc(($1+1)*sizeof(char *));
for (i = 0; i < $1; i++) {
PyObject *s = PyList_GetItem($input,i);
if (!PyString_Check(s)) {
free($2);
PyErr_SetString(PyExc_ValueError, "List items must be strings");
return NULL;
}
$2[i] = PyString_AsString(s);
}
$2[i] = 0;
}
%typemap(freearg) (int argc, char *argv[]) {
free($2); // If here is uneeded, free(NULL) is legal
}
이 간단 할 파이썬을 수행 할 수 있습니다 : 나는 사소한 변화에 여기를 인용했습니다 foo
은 int argc, char *argv[]
서명과 일치하는 함수입니다. 간단하고 직관적 인 Python 프로그래머 용으로 사용하고 복잡한 비트를 캡슐화하고 다시 사용합니다.
%module test
%include <argcargv.i>
%apply (int ARGC, char **ARGV) { (int argc, char *argv[]) }
void foo(int argc, char *argv[]);
충분 : 문서가 있지만 언급하지 않는 것 무엇
이미 모든이 작업을 수행하는 인터페이스 파일이있을 것입니다.
감사합니다. 그러나이 .c 파일을 변경하고 파이썬 코드를 사용하면 변경 내용이 반영되지 않습니다. 나는 당신의 코드 끝에 "del dll"을 시도했지만 도움이되지 않는다. 이 DLL을 어떻게 언로드합니까? – SEU