2017-05-22 7 views
0

Die DLL-Methode ist wie folgt zu erhalten:Rufen Sie die Rückgabeparameter

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

Ich schrieb den folgenden Code in 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 

Aber ich habe folgende Fehlermeldung:

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 

Wie kann ich dieses Problem lösen?

+0

In der Tat wurde dieser Parameter erfolgreich eingestellt, aber das Set-Ergebnis kann nicht erhalten werden –

Antwort

0

Versuchen Sie lib = ctypes.windll.LoadLibrary('API.dll'), die DLL mit (hoffentlich) die richtige Aufrufkonvention aufzurufen.

Sie können auch einfach out = ctypes.create_string_buffer(32 * 128) initialisieren, um eine Null-Zeichenfolge dieser Größe zu initialisieren.

+0

Vielen Dank. Ich habe den Grund für das Problem gefunden. Es begann mit stdcall, nicht cdecl –