3 int fputs(const char*,FILE*);
4 int fclose(FILE*);
我们可以直接将库函数封装起来使用。
01 [GCC 4.4.5] on linux2
02 Type "help", "copyright", "credits" or "license" for more information.
03 >>> import foo
04 >>> foo.fopen("test","w")
05
06 >>> f=foo.fopen("test","w")
07 >>> foo.fputs("1234\n",f)
08 1
09 >>> foo.fclose(f)
10 0
5 数组
PYTHON里没有数组。因此SWIG只能将数组的首地址作为一个指针进行一次封装。也就是说,在PYTHON中,你只能把这个数组当成指针来用。它可以被传递给参数为指针的函数作为参数。也可以被另一个数组进行赋值,实际上赋值进行的就是内存拷贝,而并不会改变指针的地址。可以看下面的例子。
01 //file: ary.c
02 #include
03 int a[5]={1,2,3,4,5};
04 int b[6]={10,20,30,40,50,60};
05
06 void PrintArray(int *a,size_t n)
07 {
08 size_t i=0;
09 printf("{");
10 for(i=0;i 11 { 12 printf("%d,",*a++); 13 } 14 printf("}\n"); 15 } 16 17 void pa() 18 { 19 PrintArray(a,sizeof(a)/sizeof(int)); 20 } 21 22 void pb() 23 { 24 PrintArray(b,sizeof(b)/sizeof(int)); 25 } 02 %module ary 03 %{ 04 05 extern int a[5]; 06 extern int b[6]; 07 08 extern void pa(); 09 extern void pb(); 10 %} 11 12 int a[5]; 13 int b[6]; 14 void pa(); 15 void pb(); 02 import ary 03 print "a is:" 04 ary.pa() 05 print str(ary.cvar.a) 06 print "b is:" 07 print str(ary.cvar.b) 08 ary.pb() 09 10 print "\n" 11 ary.cvar.a=ary.cvar.b 12 13 print "After a=b" 14 print "a is:" 15 ary.pa() 16 print str(ary.cvar.a) 17 print "b is:" 18 print str(ary.cvar.b) 19 ary.pb() 运行结果: view sourceprint 01 a is: 02 {1,2,3,4,5,} 03 _306720b7_p_int 04 b is: 05 _446720b7_p_int 06 {10,20,30,40,50,60,} 07 08 09 After a=b 10 a is: www.2cto.com 11 {10,20,30,40,50,} 12 _306720b7_p_int 13 b is: 14 _446720b7_p_int 15 {10,20,30,40,50,60,} 可以看到,运行a=b并没有改变a指针指向的位置,而只是将b数组的前5个元素拷贝到a指针指向的位置而已。
01 //file: ary.i
01 #file: testary.py