# include<stdio.h>
# include<stdarg.h>
int foo(const int address,int num,...)
{
va_list ap;
va_start(ap, num);//将ap指向fmt后的第一个参数
int value,value_h,i;
i = num;
switch(num){
case 0:
value = address;
value_h = 0;
printf("value_h=%d, value=%d,i=%d\n",value_h, value,i);
break;
default:
value = address;
value_h = va_arg(ap,int);
printf("value_h=%d, value=%d,i=%d\n",value_h, value,i);
break;
}
for(i=0;i<num-2;i++){
value = va_arg(ap,int);//前提是我们知道第一个参数是int型;指针指向下一个参数
value_h = va_arg(ap,int);//前提是我们知道第一个参数是int型;指针指向下一个参数
printf("value_h=%d, value=%d,i=%d\n",value_h, value,i);
i++;
}
if (i < num-1){
value = va_arg(ap,int);
value_h = 0;
printf("value_h=%d, value=%d,i=%d\n",value_h, value,i);
}
va_end(ap);//将ap置为NULL
return 0;
}
采用GCC将foo函数编译成dll,可参考WINDOW下安装mingw64,可参考:
下载安装MinGW-w64详细步骤(c/c++的编译器gcc的windows版,win10真实可用)_jjxcsdn的博客-CSDN博客
安装完毕,在当前目录的cmd中运行gcc foo.c -shared -o foo.dll
python中调用foo.dll,试运行代码如下:
from ctypes import cdll
from time import time
dll=cdll.LoadLibrary('./foo.dll')
# dll.foo(100,10,3,4,5,6,7,8,9,10,11,12)
dll.foo(100,3,2,3)
# dll.foo(100,0)
# dll.foo(100,1,2)