2018.05.31
一种不需要结构体更简单的方法
- dllmain.c中的函数
DLLIMPORT char *E48s(char *root)
{
int m,n,i=0;
char s[13][6];
for(m=10;m<100;m++)
{
for(n=10;n<100;n++)
{
if(fabs(m*1.0/n-(m/10)*1.0/(n%10))<1e-6&&m%10==n/10)
{
sprintf(s[i++],"%d/%d\n",m,n);
}
}
}
//***
sprintf(root,"%s",s[0]);
//***
return root;
}
- python中的函数
def E48s(self):
dll.E48s.arqtypes = c_char_p
dll.E48s.restype = c_char_p
pout = c_char_p(b'')
dll.E48s(pout)
return pout.value.decode()
2018.05.30
- 在dll的.h文件中定义结构体:
//在dll的.h文件中定义结构体:
typedef struct _SimpleStruct
{
int num[999];
char *pstr;
} SimpleStruct, *PSimpleStruct;
- dllmain.c中的函数
//dllmain.c中的函数
DLLIMPORT char *E48(PSimpleStruct root)
{
int m,n,i=0;
//定义二维数组 不能用动态分配存储 具体原因见0x11
char s[13][6];
for(m=10;m<100;m++)
{
for(n=10;n<100;n++)
{
if(fabs(m*1.0/n-(m/10)*1.0/(n%10))<1e-6&&m%10==n/10)
{
//循环存储多个sprintf打印的字符串
sprintf(s[i++],"%d/%d\n",m,n);
}
}
}
//把二维数组的首地址赋给形参中的指针
root->pstr = s[0];
return root->pstr;
}
- python中的函数
#python中的函数
#此处结构体的定义要与dll中结构体的定义对应
class SimpStruct(Structure):
_fields_ = [ ("num", c_int*999),
("pstr",c_char_p)]
#...
class fun:
def E48(self):
dll.E48.restype = c_char_p
pout = SimpStruct()
dll.E48(byref(pout))
return pout.pstr.decode()
#...
if __name__ == '__main__':
f = fun()
root = f.E48()
print(root)
网友评论