有如下一个用 C 写的扩展模块: mytest. 我的问题是:在 PY 中如何给实参呢?
#include <stdio.h>
#include "Python.h"
char* gets_s(char s[],int n) {
int c;
char *cs;
if((cs=s)==NULL) return NULL;
while(--n>0 && (c=getc(stdin))!=EOF && c!='\n')
*cs++=c;
*cs='\0';
return (c==EOF && cs==s) ||(c=='\n' && cs==s)? NULL : s ;
}
static PyObject* mytest_get(PyObject *self, PyObject *args) {
int n;
char * s=NULL;
if(!PyArg_ParseTuple(args, "si", &s, &n))
return NULL;
return (PyObject*)Py_BuildValue("s", gets_s(s,n));
}
#python 中:
import mytest
from ctypes import *
arr = (c_byte * 10)() # c_char*10
print('input: ')
mytest.gets_s(arr,10)# TypeError: must be str, not c_byte_Array_10
//另外在C中如何写这样的导出函数:
struct demo {
char name[10];
int age;
};
void GetString(struct demo *p) {
strcpy(p->name, "My Test");
p->age = 1;
}
static PyObject* wrap_GetString(PyObject *self, PyObject *args) {
struct demo* s;
if(!PyArg_ParseTuple(args, "?", &s)) //这里的类型如何写?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.