使用Python调用DLL以获取返回参数

时间:2017-05-22 01:04:14

标签: python dll

DLL方法如下:

void _stdcall PostAndRecvEx(IN char* Post, OUT char* Recv)
parameters :
Post :input
Recv :output
Return value: None

我在Python中编写了以下代码:

-*- coding:utf-8 -*-
import ctypes,time
lib = ctypes.cdll.LoadLibrary('API.dll')
keyinfo = '''
<?xml version="1.0" encoding="UTF-8"?>
<business id="20002" comment="settings">
<body yylxdm="1">
<keypwd>88888888</keypwd>
</body>
</business>
'''
in_keyinfo = ctypes.c_char_p()
in_keyinfo.value = keyinfo
out = ctypes.create_string_buffer('\000'*32*128)
lib.PostAndRecvEx(in_keyinfo,out)
print out.value

但是我收到了以下错误:

Traceback (most recent call last):
  File "re.py", line 15, in <module>
lib.PostAndRecvEx(in_keyinfo,out)
ValueError: Procedure called with not enough arguments (8 bytes missing) or wrong calling convention

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

尝试lib = ctypes.windll.LoadLibrary('API.dll')用(希望)正确的调用约定来调用DLL。

此外,您可以out = ctypes.create_string_buffer(32 * 128)初始化该大小的空字符串。