2017-05-22 17 views
0

的DLL方法如下:調用與Python的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 

我該如何解決這個問題?

+0

其實這個參數設置成功了,但是設置結果不能獲得 –

回答

0

嘗試lib = ctypes.windll.LoadLibrary('API.dll')用(希望)正確調用約定來調用DLL。

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

+0

謝謝。我找到了問題的原因。它從stdcall開始,而不是cdecl –

相關問題