您的位置:首页 > 编程语言 > Python开发

python调用dll文件时传入参数是int*,返回值是char*,对传入的char*所指的内容的修改

2014-09-25 10:17 459 查看
首先载入dll:test = ctypes.windll.LoadLibrary('dlltest.dll')

若调用的dll中的函数的参数是int*:

a = ctypes.c_int(5)

#add是dll中的函数。int add(int* x, int y)

test.add(ctypes.byref(a),4)

############################################################

若返回值是char*:

C Code:

char* f(char * str)

{

return str;

}

--------------------------------------------------------------------------------

Python Code:

loadlibrary。。。

ff = dll.f

ff.argtypes = [ctypes.c_char_p]

ff.restype = ctypes.c_char_p #no []!!!!! and restype not restypes

input = "hello world"

output = ff(input)

print output

#################################################################

C Code:

char* t(char* ss)

{

int i = strlen(ss);

ss[1]='1';

ss[i]='G';

ss[i+1]='\0';

return ss;

}

//在这里只会改变ss所指的内容,但不会改变ss所指内容的长度!!!

---------------------------------------------------------------

Python Code:

loadlibrary。。。

t = dlltest.t

t.argtypes = [ctypes.c_char_p]

t.restype = ctypes.c_char_p

arg = "jjjjjjjjjjjjj"

print "input ",arg

#output = ctypes.c_char_p

output = t(arg)

print "output ",type(output)," ",output

#若是输出arg,后面的'G'不会显示,但前面修改成的'1'会表现。

#######################################################

对传入的char*所指的内容进行修改:

C Code:

char* t(char* ss)

{

char d[] = "12345678";

strcat(ss,d);

return ss;

}

--------------------------------------------------------------------------------------

Python Code:

dlltest = ctypes.windll.LoadLibrary('mydll.dll')

t = dlltest.t

t.argtypes = [ctypes.c_char_p]

t.restype = ctypes.c_char_p

p = ctypes.create_string_buffer(10) #!!!!!!!!

s = t(p)

#print type(s),len(s),type(p.value),len(p.value)

print "s:",s," / p.value:",p.value

#print p

此时,s和p.value都被修改了,并且其长度都是8。(实现了获取参数中被修改的char*值)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐