Интернет магазин китайских планшетных компьютеров



Компьютеры - SWIG - Простой пример использования SWIG

08 июня 2011


Оглавление:
1. SWIG
2. Простой пример использования SWIG



Предположим, что есть программа на C, реализующая некоторую функцию:

/* File : try.c */
#include <stdio.h>
 
void echo {
        printf;
     /* printf;     */
}

Для того чтобы можно было воспользоваться этой функцией из Python, нужно написать интерфейсный файл примерно следующего содержания:

/* File : try.i */
%module mytry
 
extern void echo;


создание модуля расширения может быть выполнено примерно так:

>swig -python try.i
>gcc -c -fpic try_wrap.c try.c  -DHAVE_CONFIG_H  -I"/usr/local/include/python2.5" -I"/usr/local/lib/python2.5/config"
>gcc -shared try.o try_wrap.o -o _mytry.so

или так:

>swig -python try.i
>gcc -c try_wrap.c try.c  -DHAVE_CONFIG_H
>gcc -shared try_wrap.o try.o -o _try.pyd -lpython25


Результат работы

Набираем в интерпретаторе Python следующий текст

>>> import mytry
>>> mytry.echo
"what's the hell!"
>>>


Если заглянуть внутрь mytry.py то можно увидеть

# This file was automatically generated by SWIG.
# Version 1.3.36
#
# Don't modify this file, modify the SWIG interface instead.
# This file is compatible with both classic and new-style classes.
 
import _mytry
import new
new_instancemethod = new.instancemethod
try:
    _swig_property = property
except NameError:
    pass # Python < 2.2 doesn't have 'property'.
def _swig_setattr_nondynamic:
    if : return self.this.own
    if :
        if type.__name__ == 'PySwigObject':
            self.__dict__ = value
            return
    method = class_type.__swig_setmethods__.get
    if method: return method
    if  or hasattr:
        self.__dict__ = value
    else:
        raise AttributeError
 
def _swig_setattr:
    return _swig_setattr_nondynamic
 
def _swig_getattr:
    if : return self.this.own
    method = class_type.__swig_getmethods__.get
    if method: return method
    raise AttributeError,name
 
def _swig_repr:
    try: strthis = "proxy of " + self.this.__repr__
    except: strthis = ""
    return "<%s.%s; %s >" % 
 
import types
try:
    _object = types.ObjectType
    _newclass = 1
except AttributeError:
    class _object : pass
    _newclass = 0
del types
 
 
echo = _mytry.echo




Просмотров: 1813


<<< Smart Install Maker
WebMethods >>>