SWIG를 사용하여 C에서 Python의 정적 함수에 어떻게 액세스합니까? 예 :Python에서 정적 C 함수에 액세스
static int foo(int a, int b);
C 코드는 변경할 수 없습니다.
SWIG를 사용하여 C에서 Python의 정적 함수에 어떻게 액세스합니까? 예 :Python에서 정적 C 함수에 액세스
static int foo(int a, int b);
C 코드는 변경할 수 없습니다.
이 정말 수있는 유일한 방법은 하나
는 # 1를 들어 내가 함께 예를 들어 난방을 넣어 사용할 수있는 전체 프로그램의 소스를 가지고 der 파일 :
#ifndef TEST_H
#define TEST_H
#include <stdio.h>
static int foo(int a, int b) {
return printf("Frobination: %d-%d\n",a,b);
}
#endif
헤더 파일 내부에서 그렇게하는 것이 이상하지만 불가능하지는 않습니다. 이 경우 우리는 정상으로 포장 할 수 있습니다
%module test
%{
#include "test.h"
%}
%include "test.h"
그리고로 실행 : 그것은 정적 함수의 로컬 버전이 바로 여기에 사용되는 물론 있다는 경고와 함께
Python 2.7.3 (default, Aug 1 2012, 05:16:07)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import test
>>> test.foo(1,2)
Frobination: 1-2
17
>>>
여러 번역 단위 및 정적 함수가있는 경우에는 정상입니다.
#ifndef TEST_H
#define TEST_H
typedef int (*fptr)(int a, int b);
extern fptr foo;
#endif
그리고로의 구현 :
%module test
%{
#include "test.h"
%}
int foo(int a, int b);
장소 :
#include "test.h"
#include <stdio.h>
static int foo_impl(int a, int b) {
return printf("Frobination: %d-%d\n",a,b);
}
fptr foo = foo_impl;
어떤 우리가 다음으로 포장 할 수 있습니다 우리는 헤더 파일이있을 수 있습니다 # 2의
우리는 SWIG에게 거짓말을하고 foo가 함수 포인터가 아니라고 주장했지만 작동하고 완벽하게 합법적입니다. 왜냐하면 모든 ge 코드가 유효합니다.
# 3의 경우 이론적으로 다양한 플랫폼에 특정한 비 휴대용 트릭 클립이 정적 함수가 함수 포인터에있는 주소를 추출 할 수는 있지만 깨지기 쉽고 전반적으로 좋지 않습니다.
# 4의 경우 소스를 사용할 수 있으면 집이 무료입니다.
나는 이것이 어떻게 작동하는지 혼란 스럽다. C에서 함수가 정적이라면 같은 C 프로그램의 다른 번역 단위에서 액세스 할 수 없다. 가능한 유일한 방법은 함수 정의가 어딘가에 헤더 파일에있는 경우입니다. – Flexo