Я пытаюсь портировать код C dll (FANUC FOCAS Library - для ЧПУ) через Python с использованием ctypes, поэтому я написал код переноса. (как belows), но получить очень странный результат при загрузке DLL и вызове функции. В моем случае я не понимаю использование обработчика в python.Проблемы с обработчиком Применение cdll в Python
Я хотел бы применить следующий код c в python.
декларация (для с)
#include "fwlib64.h"
FWLIBAPI short WINAPI cnc_allclibhndl3(const char *ipaddr,unsigned short port,
long timeout, unsigned short *FlibHndl);
Пример кода (в библиотеке Фока пособие для с)
#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)
Я хочу, чтобы функция возвращает 0 или -16, но в моем случае функция возвращение
cnc_allclibhndl3 = 65520 (i guess open port)
cnc_statinfo = -8
cnc_freelibhndl -8
Возврат Состояние функций окна данных
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.
Я не знаю, что я был что-то плохо с чем-то.
Благодарим за помощь. После изменения вышеуказанного исходного кода происходит следующая ошибка. ret = mylib.cnc_allclibhndl3 ('192.168.0.100', 8193,1, byref (h)) ctypes.ArgumentError: аргумент 1: <класс 'TypeError'>: неправильный тип – Dogdripnet
Вы, скорее всего, на Python 3. Pass байтовая строка в качестве первого параметра. 'B'192.168.0.100''. Строки Unicode соответствуют 'c_wchar_t'. –
Вы правы. Моя среда разработки - «Python3». Спасибо за помощь! – Dogdripnet