Ich versuche, einige C DLL (FANUC FOCAS-Bibliothek - für CNC) Code über Python mit Ctypes zu portieren, also schrieb ich Portierungscode. (wie unten), aber ein sehr seltsames Ergebnis beim Laden der DLL und Aufruf der Funktion. In meinem Fall verstehe ich die Verwendung von Handler in Python nicht.Handler Probleme Anwenden von cdll in Python
Ich möchte den folgenden c-Code in Python anwenden.
Declaration (für c)
#include "fwlib64.h"
FWLIBAPI short WINAPI cnc_allclibhndl3(const char *ipaddr,unsigned short port,
long timeout, unsigned short *FlibHndl);
Beispiel-Code (in focas Bibliothek Handbuch c)
#include "fwlib64.h"
void example(void)
{
unsigned short h;
short ret;
ODBST buf;
ret = cnc_allclibhndl3("192.168.0.100", 8193, 1, &h) ;
//
if (!ret) {
cnc_statinfo(h, &buf) ;
cnc_freelibhndl(h) ;
} else {
printf("ERROR!(%d)\n", ret) ;
}
}
Testfocas.py
from ctypes import *
mylib = cdll.LoadLibrary('./Fwlib64.dll')
class ODBSYS(Structure):
pass
_fields_ =[
("dummy", c_ushort),
("max_axis", c_char*2),
("cnc_type", c_char*2),
("mt_type",c_char*2),
("series",c_char*4),
("version",c_char*4),
("axes",c_char*2),]
h=c_ushort()
pt=pointer(h)
ret=c_short()
buf=ODBSYS()
ret=mylib.cnc_allclibhndl3('192.168.0.100',8193,1,pt)
mylib.cnc_statinfo(h,buf)
mylib.cnc_freelibhndl(h)
Ich möchte die Funktion 0 oder -16 zurückzukehren, aber in meinem Fall die Funktion Rückkehr ist
cnc_allclibhndl3 = 65520 (i guess open port)
cnc_statinfo = -8
cnc_freelibhndl -8
Return Status von Datenfenster Funktionen
EW_OK(0) Normal termination
EW_SOCKET(-16) Socket communication error Check the power supply of CNC, Ethernet I/F board, Ethernet connection cable.
EW_HANDLE(-8) Allocation of handle number is failed.
Ich weiß nicht, was ich falsch mit.
Vielen Dank für Ihre Hilfe. Nach dem Ändern des obigen Quellcodes tritt der folgende Fehler auf. ret = mylib.cnc_allclibhndl3 ('192.168.0.100', 8193,1, byref (h)) ctypes.ArgumentError: Argument 1:: Falscher Typ –
Dogdripnet
Sie sind wahrscheinlich auf Python 3. Pass eine Byte-Zeichenfolge als erster Parameter 'b'192.168.0.100''. Unicode-Zeichenfolgen entsprechen "c_wchar_t". –
Sie haben Recht. Meine Entwicklungsumgebung ist 'Python3'. Danke für Ihre Hilfe! – Dogdripnet